Agregácia v MongoDB je cenným nástrojom na analýzu a filtrovanie databáz. Systém potrubia umožňuje špecifikovať dotazy, čo umožňuje vysoko prispôsobené výstupy.

Čo je agregácia v MongoDB?

MongoDB je nerelačná a dokumentovo orientovaná databáza, ktorá je navrhnutá pre použitie s veľkým a rôznorodým množstvom údajov. Vďaka upusteniu od rigidných tabuliek a použitiu techník ako sharding (ukladanie údajov na rôznych uzloch) môže riešenie NoSQL horizontálne škálovať a zároveň zostať vysoko flexibilné a odolné voči poruchám.

Dokumenty v binárnom formáte JSON BSON sú zoskupené do zbierok a je možné ich vyhľadávať a upravovať pomocou jazyka MongoDB Query Language (MQL). Hoci tento jazyk ponúka mnoho možností, nie je vhodný (alebo možno nie je dostatočne vhodný) na analýzu údajov. Preto MongoDB poskytuje agregáciu.

V informatike sa tento termín vzťahuje na rôzne procesy. V MongoDB sa agregácia vzťahuje na analýzu a zhrnutie údajov pomocou rôznych operácií s cieľom dosiahnuť jediný a jasný výsledok. Počas tohto procesu sa údaje z jedného alebo viacerých dokumentov analyzujú a filtrujú podľa faktorov definovaných používateľom.

V nasledujúcich častiach sa nielen pozrieme na možnosti, ktoré agregácia MongoDB ponúka pre komplexnú analýzu údajov, ale poskytneme aj príklady toho, ako môžete aggregate ( ) metódu použiť v systéme správy databáz.

Čo potrebujem na agregáciu MongoDB?

Na používanie agregácie v MongoDB je potrebných len niekoľko požiadaviek. Metóda sa vykonáva v shelli a funguje podľa logických pravidiel, ktoré môžete prispôsobiť potrebám vašej analýzy.

Ak chcete používať agregáciu v Mongo DB, musíte mať MongoDB už nainštalované vo vašom počítači. Ak tomu tak nie je, v našom komplexnom tutoriáli MongoDB nájdete informácie o tom, ako stiahnuť, nainštalovať a spustiť databázu.

Mali by ste tiež používať výkonný firewall a uistiť sa, že vaša databáza je nastavená v súlade so všetkými aktuálnymi bezpečnostnými štandardmi. Na spustenie agregácie v MongoDB potrebujete mať administrátorské práva.

Databáza funguje na všetkých platformách, takže nižšie popísané kroky platia pre všetky operačné systémy.

Čo je to potrubie v agregačnom rámci MongoDB?

V MongoDB môžete vykonávať jednoduché vyhľadávania alebo dotazy, pričom databáza okamžite zobrazí výsledky. Táto metóda je však veľmi obmedzená, pretože môže zobraziť len výsledky, ktoré už existujú v uložených dokumentoch. Tento typ dotazu nie je určený na hlbšiu analýzu, opakujúce sa vzory alebo na získavanie ďalších informácií.

Niekedy je potrebné zohľadniť rôzne zdroje v rámci databázy, aby bolo možné vyvodiť zmysluplné závery. V takýchto situáciách sa používa agregácia MongoDB. Na dosiahnutie takýchto výsledkov metóda aggregate ( ) využíva potrubia.

Úloha potrubia

Agregačné potrubia v MongoDB sú procesy, v ktorých sa existujúce údaje analyzujú a filtrujú pomocou rôznych krokov, aby sa zobrazili výsledky, ktoré používatelia hľadajú. Tieto kroky sa nazývajú fázy. V závislosti od požiadaviek je možné iniciovať jednu alebo viacero fáz. Tieto sa vykonávajú jedna po druhej a menia pôvodný vstup tak, aby sa na konci mohol zobraziť výstup (informácie, ktoré hľadáte).

Zatiaľ čo vstup pozostáva z mnohých údajov, výstup (t. j. konečný výsledok) je jednotný. V ďalšej časti tejto sekcie vysvetlíme jednotlivé fázy agregácie MongoDB.

Syntax agregačného potrubia MongoDB

Najskôr sa oplatí stručne pozrieť na syntax agregácie v MongoDB. Metóda je vždy štruktúrovaná podľa rovnakého formátu a dá sa prispôsobiť vašim špecifickým požiadavkám. Základná štruktúra vyzerá takto:

db.collection_name.aggregate ( pipeline, options )
shell

Tu je collection_name názov príslušnej kolekcie. Fázy agregácie MongoDB sú uvedené pod pipeline. options sa môže použiť pre ďalšie voliteľné parametre, ktoré definujú výstup.

Fázy výstavby potrubia

V MongoDB existuje mnoho fáz agregačného potrubia. Väčšina z nich sa môže v rámci potrubia použiť viackrát. Vymenovať všetky možnosti by presahovalo rámec tohto článku, najmä preto, že niektoré z nich sú potrebné len pre veľmi špecifické operácie. Aby ste však mali predstavu o jednotlivých fázach, uvedieme tu niekoľko najčastejšie používaných:

  • $count: Táto fáza vám poskytuje informáciu o tom, koľko dokumentov BSON bolo zohľadnených pre danú fázu alebo fázy v procese.
  • $group: Táto fáza triedi a zoskupuje dokumenty podľa určitých parametrov.
  • $limit: Obmedzuje počet dokumentov, ktoré prechádzajú do ďalšej fázy v potrubí.
  • $match: V etape $match obmedzujete dokumenty, ktoré sa používajú pre nasledujúcu etapu.
  • $out: Táto fáza sa používa na zahrnutie výsledkov agregácie MongoDB do zbierky. Táto fáza sa môže použiť iba na konci potrubia.
  • $project: Použite $project na výber konkrétnych polí zo zbierky.
  • $skip: Táto fáza ignoruje určitý počet dokumentov. Môžete to špecifikovať pomocou možnosti.
  • $sort: Táto operácia triedi dokumenty v zbierke používateľa. Dokumenty sa však okrem toho nemenia.
  • $unset: $unset vylučuje určité polia. Robí opak toho, čo robí $project.

Príklad agregácie v MongoDB

Aby ste lepšie pochopili, ako funguje agregácia v MongoDB, ukážeme vám niekoľko príkladov rôznych fáz a ich použitia. Ak chcete použiť agregáciu MongoDB, otvorte shell ako správca. Zvyčajne sa najskôr zobrazí testovacia databáza. Ak chcete použiť inú databázu, použite príkaz use.

Pre tento príklad si predstavme databázu, ktorá obsahuje údaje o zákazníkoch, ktorí zakúpili konkrétny produkt. Aby sme to zjednodušili, táto databáza obsahuje len desať dokumentov, ktoré majú všetky rovnakú štruktúru:

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

Boli zahrnuté nasledujúce informácie o zákazníkoch: ich meno, miesto bydliska, krajina a počet zakúpených produktov.

Ak chcete vyskúšať agregáciu v MongoDB, môžete použiť metódu insertMany ( ) na pridanie všetkých dokumentov s údajmi o zákazníkoch do zbierky s názvom „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í sa zoznam identifikátorov objektov pre každý jednotlivý dokument.

Ako používať $match

Aby sme ilustrovali možnosti agregácie v MongoDB, najskôr použijeme fázu $match na našu zbierku „customers“. Bez dodatočných parametrov by sa jednoducho vygeneroval kompletný zoznam údajov o zákazníkoch uvedených vyššie.

V nasledujúcom príklade sme však zadali, aby nám zobrazoval iba zákazníkov z Talianska. Tu je príkaz:

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

Teraz sa vám zobrazia len identifikačné čísla objektov a informácie o dvoch zákazníkoch z Talianska.

Použite $sort pre lepší prehľad

Ak chcete usporiadať svoju databázu zákazníkov, môžete použiť fázu $sort. V nasledujúcom príklade nariadime systému, aby zoradil všetky údaje o zákazníkoch podľa počtu zakúpených jednotiek, počnúc najvyšším číslom. Vstup vyzerá takto:

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

Obmedzte výstup pomocou $project

Pri doterajších fázach uvidíte, že výstup je pomerne rozsiahly. Okrem skutočných informácií v dokumentoch sa napríklad vždy vygeneruje aj identifikátor objektu. Pomocou $project v agregačnom potrubí MongoDB môžete určiť, ktoré informácie sa majú vygenerovať. Na to nastavíme hodnotu 1 pre povinné polia a 0 pre polia, ktoré nie je potrebné zahrnúť do výstupu. V našom príklade chceme vidieť len meno zákazníka a počet zakúpených produktov. Na to zadáme nasledujúce:

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

Kombinujte viacero fáz s agregáciou v MongoDB

Agregácia MongoDB vám tiež ponúka možnosť postupného uplatnenia viacerých fáz. Tieto fázy sa potom vykonávajú jedna po druhej a na konci je výstup, ktorý zohľadňuje všetky požadované parametre. Ak napríklad chcete zobraziť len mená a nákupy škótskych zákazníkov v zostupnom poradí, môžete použiť vyššie opísané fázy takto:

db.customers.aggregate ( [
	{ $match : { "country" : "Scotland" } }
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
	{ $sort : { "quantity" : -1 } }
] )
shell
Prejsť na hlavné menu