Agregace v MongoDB je cenným nástrojem pro analýzu a filtrování databází. Systém pipeline umožňuje specifikovat dotazy, což umožňuje vysoce přizpůsobené výstupy.

Co je agregace v MongoDB?

MongoDB je nerelační a dokumentově orientovaná databáze, která je navržena pro použití s velkými a různorodými objemy dat. Díky upuštění od rigidních tabulek a použití technik jako sharding (ukládání dat na různých uzlech) může řešení NoSQL škálovat horizontálně a zároveň zůstat vysoce flexibilní a odolné vůči poruchám.

Dokumenty v binárním formátu JSON BSON jsou sdruženy do kolekcí a lze je vyhledávat a upravovat pomocí jazyka MongoDB Query Language (MQL). I když tento jazyk nabízí mnoho možností, není vhodný (nebo možná není dostatečně vhodný) pro analýzu dat. Proto MongoDB poskytuje agregaci.

V informatice se tento termín vztahuje k různým procesům. V MongoDB se agregace vztahuje k analýze a shrnutí dat pomocí různých operací za účelem získání jediného a jasného výsledku. Během tohoto procesu jsou data z jednoho nebo více dokumentů analyzována a filtrována podle faktorů definovaných uživatelem.

V následujících částech se nejen podíváme na možnosti, které agregace MongoDB nabízí pro komplexní analýzu dat, ale také uvedeme příklady, jak můžete metodu aggregate ( ) použít s databázovým systémem.

Co potřebuji pro agregaci MongoDB?

Pro použití agregace v MongoDB existuje pouze několik požadavků. Metoda se provádí v shellu a funguje podle logických pravidel, která můžete přizpůsobit tak, aby vyhovovala potřebám vaší analýzy.

Abyste mohli agregaci v Mongo DB používat, musíte mít MongoDB již nainstalovaný ve svém počítači. Pokud tomu tak není, v našem komplexním tutoriálu k MongoDB se dozvíte, jak databázi stáhnout, nainstalovat a spustit.

Měli byste také používat výkonný firewall a ujistit se, že vaše databáze je nastavena v souladu se všemi aktuálními bezpečnostními standardy. K provádění agregace v MongoDB potřebujete mít práva správce.

Databáze funguje na všech platformách, takže níže popsané kroky platí pro všechny operační systémy.

Co je to pipeline v agregačním rámci MongoDB?

V MongoDB můžete provádět jednoduchá vyhledávání nebo dotazy, přičemž databáze okamžitě zobrazí výsledky. Tato metoda je však velmi omezená, protože může zobrazit pouze výsledky, které již existují v uložených dokumentech. Tento typ dotazu není určen pro hloubkovou analýzu, opakující se vzorce nebo pro odvozování dalších informací.

Někdy je třeba vzít v úvahu různé zdroje v databázi, aby bylo možné vyvodit smysluplné závěry. V takových situacích se používá agregace MongoDB. K dosažení těchto výsledků používá metoda aggregate ( ) pipeline.

Úloha potrubí

Agregační potrubí v MongoDB jsou procesy, ve kterých jsou existující data analyzována a filtrována pomocí různých kroků, aby se zobrazil výsledek, který uživatelé hledají. Tyto kroky se označují jako fáze. V závislosti na požadavcích lze zahájit jednu nebo více fází. Ty se provádějí jedna po druhé a mění váš původní vstup tak, aby se na konci mohl zobrazit výstup (informace, kterou hledáte).

Zatímco vstup se skládá z mnoha datových prvků, výstup (tj. konečný výsledek) je jediný. Různé fáze agregace MongoDB vysvětlíme později v této části.

Syntaxe agregačního potrubí MongoDB

Nejprve se podívejme na syntaxi agregace v MongoDB. Metoda má vždy stejnou strukturu a lze ji přizpůsobit vašim konkrétním požadavkům. Základní struktura vypadá takto:

db.collection_name.aggregate ( pipeline, options )
shell

Zde collection_name je název dané kolekce. Fáze agregace MongoDB jsou uvedeny pod pipeline. options lze použít pro další volitelné parametry, které definují výstup.

Fáze potrubí

V MongoDB existuje řada fází agregačního potrubí. Většinu z nich lze v rámci potrubí použít vícekrát. Uvést zde všechny možnosti by přesahovalo rámec tohoto článku, zejména proto, že některé z nich jsou vyžadovány pouze pro velmi specifické operace. Abychom vám však poskytli představu o jednotlivých fázích, uvedeme zde několik nejčastěji používaných:

  • $count: Tato fáze vám poskytuje informaci o tom, kolik dokumentů BSON bylo zohledněno pro danou fázi nebo fáze v procesu.
  • $group: Tato fáze třídí a sdružuje dokumenty podle určitých parametrů.
  • $limit: Omezuje počet dokumentů předávaných do další fáze v potrubí.
  • $match: Pomocí fáze $match omezíte dokumenty, které se použijí pro následující fázi.
  • $out: Tato fáze se používá k zahrnutí výsledků agregace MongoDB do kolekce. Tuto fázi lze použít pouze na konci pipeline.
  • $project: Pomocí $project vyberete konkrétní pole ze sbírky.
  • $skip: Tato fáze ignoruje určitý počet dokumentů. Můžete to specifikovat pomocí volby.
  • $sort: Tato operace třídí dokumenty v kolekci uživatele. Dokumenty však nejsou dále měněny.
  • $unset: $unset vylučuje určitá pole. Dělá opak toho, co dělá $project.

Příklad agregace v MongoDB

Abychom vám pomohli lépe pochopit, jak agregace v MongoDB funguje, ukážeme vám několik příkladů různých fází a jejich použití. Chcete-li použít agregaci MongoDB, otevřete shell jako správce. Obvykle se nejprve zobrazí testovací databáze. Pokud chcete použít jinou databázi, použijte příkaz use.

Pro tento příklad si představme databázi, která obsahuje údaje o zákaznících, kteří zakoupili konkrétní produkt. Abychom to zjednodušili, tato databáze obsahuje pouze deset dokumentů, které mají všechny stejnou strukturu:

{
	"name" : "Smith",
	"city" : "Glasgow",
	"country" : "Scotland",
	"quantity" : 14
}
shell

Byly zahrnuty následující informace o zákaznících: jejich jméno, místo bydliště, země a počet zakoupených produktů.

Pokud chcete vyzkoušet agregaci v MongoDB, můžete použít metodu insertMany ( ) k přidání všech dokumentů s údaji o zákaznících do kolekce s názvem „customers“:

db.customers.insertMany ( [
	{ "name" : "Smith", "city" : "Glasgow", "country" : "Scotland", "quantity" : 14 },
	{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
	{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
	{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
	{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )
shell

Zobrazí se seznam ID objektů pro každý jednotlivý dokument.

Jak používat $match

Abychom ilustrovali možnosti agregace v MongoDB, nejprve použijeme fázi $match na naši kolekci „customers“. Bez dalších parametrů by to jednoduše vygenerovalo kompletní seznam zákaznických dat uvedených výše.

V následujícím příkladu jsme však zadali, aby nám zobrazoval pouze zákazníky z Itálie. Zde je příkaz:

db.customers.aggregate ( [
	{ $match : { "country" : "Italy" } }
] )
shell

Nyní se vám zobrazí pouze ID objektů a informace o dvou zákaznících z Itálie.

Pro lepší přehled použijte $sort

Pokud chcete uspořádat svou databázi zákazníků, můžete použít fázi $sort. V následujícím příkladu dáváme systému pokyn, aby seřadil všechna data zákazníků podle počtu zakoupených jednotek, počínaje nejvyšším počtem. Vstup vypadá takto:

db.customers.aggregate ( [
	{ $sort : { "quantity" : -1 } }
] )
shell

Omezte výstup pomocí $project

S dosud použitými fázemi uvidíte, že výstup je relativně rozsáhlý. Například kromě skutečných informací v dokumentech se vždy zobrazuje také ID objektu. Pomocí $project v agregační pipeline MongoDB můžete určit, které informace mají být vypsány. K tomu nastavíme hodnotu 1 pro povinná pole a 0 pro pole, která nemusí být zahrnuta do výstupu. V našem příkladu chceme vidět pouze jméno zákazníka a počet zakoupených produktů. K tomu zadáme následující:

db.customers.aggregate ( [
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shell

Kombinujte více fází s agregací v MongoDB

Agregace MongoDB vám také dává možnost použít několik fází za sebou. Ty se pak provádějí jedna po druhé a na konci je výstup, který zohledňuje všechny požadované parametry. Pokud například chcete zobrazit pouze jména a nákupy skotských zákazníků v sestupném pořadí, můžete použít výše popsané fáze následovně:

db.customers.aggregate ( [
	{ $match : { "country" : "Scotland" } }
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
	{ $sort : { "quantity" : -1 } }
] )
shell
Přejít do hlavního menu