Jak analyzovat a filtrovat databáze pomocí agregace MongoDB
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 )shellZde 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
}shellByly 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 }
] )shellZobrazí 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" } }
] )shellNyní 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 } }
] )shellOmezte 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 } }
] )shellKombinujte 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