2023-08-18 03:59 Doba čtení: 12 min

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

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.

Tomáš Dvořák
Autor
Czechia

Píše o bezpečnosti, webu a chytrých službách s důrazem na srozumitelnost.

Předchozí článek
Počítač nejde zapnout? Zde je návod, jak to opravit
Další článek
Jak monitorovat využití sítě pro procesy v systému Linux