MongoDB se řadí mezi nejvyhledávanější a nejuznávanější NoSQL databáze pro profesionální vývoj. Díky své flexibilitě, škálovatelnosti a schopnosti zpracovávat rozsáhlé objemy dat představuje ideální volbu pro moderní aplikace. Chcete-li se naučit efektivně používat běžné dotazy a operace v MongoDB, jste na správném místě.
MUO VIDEO DNE
POKRAČOVÁNÍ V OBSAHU POKRAČUJTE PŘEJÍMÁNÍM
Ať už je vaším cílem efektivní získávání a manipulace s daty, implementace robustních datových modelů, nebo vytváření responzivních aplikací, hluboké porozumění běžným dotazům a operacím v MongoDB jednoznačně posílí vaše dovednosti.
1. Vytvoření nebo přepnutí databáze
Zřízení databáze lokálně pomocí prostředí MongoDB Shell je přímočaré, obzvláště pokud máte nastavený vzdálený cluster. Novou databázi v MongoDB lze vytvořit použitím příkazu use:
use db_name
Zatímco výše uvedený příkaz založí novou databázi, lze jej použít i pro přepnutí do již existující databáze, bez nutnosti vytvářet ji znovu.
2. Odstranění databáze
Nejdříve se přepněte do databáze, kterou si přejete odstranit, a to pomocí příkazu use, jak bylo popsáno výše. Poté databázi smažte příkazem dropDatabase():
use db_name
db.dropDatabase()
3. Vytvoření kolekce
Pro vytvoření nové kolekce se přesuňte do cílové databáze. Novou kolekci v MongoDB vytvoříte použitím klíčového slova createCollection():
db.createCollection("collection_name")
Nahraďte „collection_name“ názvem vámi zvolené kolekce.
4. Vložení dokumentu do kolekce
Při vkládání dat do kolekce máte možnost vložit buď jeden dokument, nebo pole dokumentů.
Pro vložení jednoho dokumentu použijte:
db.collection_name.insertOne({"Name":"Idowu", "Likes":"Chess"})
Výše uvedený postup lze využít také pro vložení pole dokumentů s jediným ID:
db.collection_name.insertOne([{"Name":"Idowu", "Likes":"Chess"}, {"Language": "Mongo", "is_admin": true}])
Chcete-li vložit více dokumentů najednou, přičemž každý z nich bude mít samostatné ID, použijte klíčové slovo insertMany:
db.collection_name.insertMany([{"Name":"Idowu", "Likes":"Chess"}, {"Name": "Paul", "Likes": "Wordle"}])
5. Získání všech dokumentů z kolekce
Dotaz na všechny dokumenty v kolekci je možný pomocí klíčového slova find():
db.collection_name.find()
Výše uvedený příkaz vrátí všechny dokumenty v dané kolekci.
Můžete také omezit množství vrácených dat na konkrétní počet. Například, pro získání pouze prvních dvou dokumentů použijte následující příkaz:
db.collection_name.find().limit(2)
6. Filtrování dokumentů v kolekci
V MongoDB existuje mnoho způsobů, jak filtrovat dokumenty. Jako příklad si vezměte následující data:
Pokud se dotazujete pouze na specifické pole v dokumentu, použijte metodu find:
db.collection_name.find({"Likes":"Wordle"}, {"_id":0, "Name":1})
Výše uvedený příkaz vrátí všechny dokumenty, kde hodnota „Likes“ je „Wordle“, přičemž zobrazí pouze jména a ID dokumentu bude ignorováno.
Kolekci je také možné filtrovat podle číselného kritéria. Pokud například chcete zobrazit jména všech uživatelů starších 21 let, použijte operátor $gt:
db.collection_name.find({"Likes":"Chess", "Age":{"$gt":21}}, {"_id":0, "Name":1})
Výstup bude vypadat následovně:
Zkuste nahradit find za findOne, abyste zjistili, co se stane. Kromě toho existuje mnoho dalších klíčových slov pro filtrování:
- $lt: Vrátí všechny hodnoty menší než zadaná.
- $gte: Vrátí hodnoty stejné nebo větší než zadaná.
- $lte: Vrátí hodnoty menší nebo rovné zadané.
- $eq: Vrátí všechny hodnoty rovné zadané.
- $ne: Vrátí všechny hodnoty, které se nerovnají zadané.
- $in: Používá se při dotazování na základě pole. Vrátí všechny hodnoty, které odpovídají kterékoli z položek v poli. Klíčové slovo $nin má opačný efekt.
7. Řazení dotazů
Řazení se používá k uspořádání dotazů v určitém pořadí. Můžete řadit vzestupně nebo sestupně. Důležité je mít na paměti, že řazení vyžaduje číselný odkaz.
Například pro vzestupné řazení použijte:
db.collection_name.find({"Likes":"Chess"}).sort({"Age":1})
Pro seřazení výše uvedeného dotazu v sestupném pořadí, nahraďte „1“ za „-1“:
db.collection_name.find({"Likes":"Chess"}).sort({"Age":-1})
8. Aktualizace dokumentu
Aktualizace v MongoDB vyžadují atomické operátory, které definují, jakým způsobem se má aktualizace provést. Následuje seznam běžně používaných atomických operátorů, které můžete kombinovat s aktualizačními dotazy:
- $set: Slouží pro přidání nového pole nebo úpravu stávajícího.
- $push: Umožňuje vložení nové položky do pole. Pro vložení více položek najednou se kombinuje s operátorem $each.
- $pull: Odstraní položku z pole. Při použití s $in odstraní více položek najednou.
- $unset: Odstraní pole z dokumentu.
Pro aktualizaci dokumentu a přidání nového pole použijte například:
db.collection_name.updateOne({"Name":"Sandy"}, {"$set":{"Name":"James", "email":"[email protected]"}})
Výše uvedený příkaz aktualizuje určený dokument, jak je znázorněno níže:
Odstranění pole s e-mailem je jednoduché s operátorem $unset:
db.collection_name.updateOne({"Name":"Sandy"}, {"$unset":{"email":"[email protected]"}})
Podívejte se na následující ukázková data:
Položku můžete vložit do existujícího pole s položkami pomocí operátoru $push:
db.collection_name.updateOne({"Name":"Pete"}, {"$push":{"items":"Plantain"}})
Zde je výsledek:
S operátorem $each vložíte více položek najednou:
db.collection_name.updateOne({"Name":"Pete"}, {"$push":{"items": {"$each":["Almond", "Melon"]}}})
Zde je výstup:
Jak již bylo zmíněno, operátor $pull odstraňuje položku z pole:
db.collection_name.updateOne({"Name":"Pete"}, {"$pull":{"items":"Plantain"}})
Aktualizovaná data vypadají takto:
Zahrnutím klíčového slova $in odstraníte více položek z pole najednou:
db.collection_name.updateOne({"Name":"Pete"}, {"$pull":{"items": {"$in":["Almond", "Melon"]} }})
9. Odstranění dokumentu nebo pole
Pro odstranění dokumentu z kolekce použijte klíčové slovo deleteOne nebo deleteMany. Pro odstranění dokumentu na základě zadaného pole použijte deleteOne:
db.collection_name.deleteOne({"Name":"IDNoble"})
Pokud potřebujete odstranit více dokumentů se stejnými klíči, použijte namísto toho deleteMany. Dotaz níže odstraní všechny dokumenty, které mají šachy jako oblíbenou aktivitu.
db.collection.deleteMany({"Likes":"Chess"})
10. Operace indexování
Indexování zlepšuje výkon dotazů tím, že zefektivňuje počet dokumentů, které MongoDB potřebuje prohledat. Většinou je nejvhodnější vytvořit index pro pole, na která se často dotazujete.
Indexování v MongoDB je podobné tomu, jak používáte indexy pro optimalizaci SQL dotazů. Například, pro vytvoření vzestupného indexu v poli „Name“:
db.collection.createIndex({"Name":1})
Pro zobrazení vašich indexů použijte:
db.collection.getIndexes()
Výše uvedené je pouze úvod do problematiky. Pro vytvoření indexu v MongoDB existuje několik dalších metod.
11. Agregace
Agregační kanál, což je vylepšená verze MapReduce, vám umožňuje spouštět a ukládat složité výpočty přímo z MongoDB. Na rozdíl od MapReduce, které vyžaduje zápis mapy a funkcí redukce do samostatných JavaScript funkcí, je agregace přímočará a využívá pouze vestavěné MongoDB metody.
Podívejme se například na následující data o prodeji:
S použitím agregace v MongoDB můžete vypočítat a uložit celkový počet prodaných produktů pro každou kategorii, jak je uvedeno níže:
db.sales.aggregate([{$group:{"_id":"$Section", "totalSold":{$sum:"$Sold"}}}, {$project:{"_id":0, "totalSold":1, "Section":"$_id"}}])
Výše uvedený dotaz vrátí následující:
Hlavní dotazy v MongoDB
MongoDB nabízí mnoho metod pro dotazování, včetně funkcí pro zlepšení výkonu dotazů. Bez ohledu na programovací jazyk, který používáte, jsou výše uvedené struktury dotazů základem pro interakci s databází MongoDB.
Nicméně mohou existovat určité odlišnosti v základní syntaxi. Například, zatímco některé programovací jazyky, jako je Python, rozpoznávají hadí notaci, jiné, včetně JavaScriptu, používají velbloudí notaci. Ujistěte se, že prozkoumáte, co funguje pro vámi zvolenou technologii.