11 MongoDB dotazy a operace, které musíte znát

Photo of author

By etechblogcz

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.