Agregácia skupiny MongoDB

Agregacia Skupiny Mongodb



Agregácia je postup extrahovania údajov z kolekcie MongoDB. Spracováva množstvo dokumentov a poskytuje odhadované výsledky. Agregácia v MongoDB má niekoľko operátorov a metód, ktoré vykonávajú rôzne úlohy. Medzi týmito operátormi operátor $ group zoskupuje dokumenty pre každé jedinečné zoskupenie a usporiada ich podľa definovaného výrazu. Operátor skupiny je v MongoDB významný, pretože umožňuje širokú škálu manipulácií s údajmi. Agregácia $ group v príklade MongoDB spolu s rôznymi akumulátormi je uvedená nižšie.

Ako funguje agregácia skupín v MongoDB?

Operátor $group by sa mal použiť na zoskupenie vstupných dokumentov podľa zadaného výrazu _id. Potom by mal vrátiť jeden dokument s celkovými hodnotami pre každú samostatnú skupinu. Na začiatok implementácie sme v MongoDB vytvorili kolekciu „Knihy“. Po vytvorení zbierky „Knihy“ sme vložili dokumenty, ktoré súvisia s rôznymi poľami. Dokumenty sa vkladajú do kolekcie pomocou metódy insertMany(), ako je dotaz, ktorý sa má vykonať, znázornený nižšie.

>db.Books.insertMany([

{
_id:1,
názov: 'Anna Karenina',
cena: 290,-
rok: 1879,
order_status: 'Na sklade',
autor: {
'meno':'Leo Tolstoj'
}
},
{
_id:2,
názov: 'To Kill a Mockingbird',
cena: 500,-
rok: 1960,
order_status: 'vypredané',
autor: {
'name':'Harper Lee'
}
},
{
_id:3,
názov: 'Neviditeľný muž',
cena: 312,
rok: 1953,
order_status: 'Na sklade',
autor: {
'name':'Ralph Ellison'
}
},
{
_id:4,
názov: 'Milovaný',
cena: 370,-
rok: 1873,
order_status: 'out_of_stock',
autor: {
'name':'Toni Morrison'
}
},
{
_id:5,
názov: 'Veci sa rozpadajú',
cena: 200,-
rok: 1958,
order_status: 'Na sklade',
autor: {
'name':'Chinua Achebe'
}
},
{
_id:6,
názov: 'Fialová farba',
cena: 510,-
rok: 1982,
order_status: 'vypredané',
autor: {
'name':'Alice Walker'
}
}
])

Dokumenty sa úspešne uložia do zbierky „Knihy“ bez toho, aby došlo k akejkoľvek chybe, pretože výstup je potvrdený ako „pravdivý“. Teraz použijeme tieto dokumenty kolekcie „Books“ na vykonanie agregácie „$group“.









Príklad č. 1: Použitie $group Agregation



Tu je demonštrované jednoduché použitie agregácie $group. Súhrnný dotaz najprv zadá operátor „$group“, potom operátor „$group“ ďalej preberá výrazy na generovanie zoskupených dokumentov.





>db.Books.aggregate([

{ $group:{ _id:'$author.name'} }

])

Vyššie uvedený dotaz operátora $group je špecifikovaný pomocou poľa „_id“ na výpočet celkových hodnôt pre všetky vstupné dokumenty. Potom sa poľu „_id“ priradí „$author.name“, ktoré tvorí inú skupinu v poli „_id“. Samostatné hodnoty $author.name budú vrátené, pretože nepočítame žiadne akumulované hodnoty. Vykonanie súhrnného dotazu $group má nasledujúci výstup. Pole _id obsahuje hodnoty meno autora.



Príklad č. 2: Použitie $group Agregation s $push Accumulator

Príklad agregácie $ group používa akýkoľvek akumulátor, ktorý už bol spomenutý vyššie. Ale môžeme použiť akumulátory v $group agregácii. Akumulátorové operátory sú tie, ktoré sa používajú v poliach vstupného dokumentu iných ako tie, ktoré sú „zoskupené“ pod „_id“. Predpokladajme, že chceme vložiť polia výrazu do poľa, potom sa v operátori „$group“ vyvolá akumulátor „$push“. Príklad vám pomôže jasnejšie pochopiť „$push“ akumulátor skupiny „$group“.

>db.Books.aggregate(

[

{ $group : { _id : '$_id', rok: { $push: '$year' } } }

]

).pekna();

Tu chceme zoskupiť dátum vydania daných kníh v poli. Na dosiahnutie tohto cieľa by sa mal použiť vyššie uvedený dotaz. Agregačný dotaz je vybavený výrazom, kde operátor „$group“ berie výraz poľa „_id“ a výraz poľa „year“ na získanie roku skupiny pomocou akumulátora $push. Výstup získaný z tohto špecifického dotazu vytvorí pole ročných polí a v ňom uloží vrátený zoskupený dokument.

Príklad č. 3: Použitie agregácie skupín $ s akumulátorom „$min“.

Ďalej máme „$min“ akumulátor, ktorý sa používa v agregácii $group na získanie minimálnej zodpovedajúcej hodnoty z každého dokumentu v kolekcii. Výraz dopytu pre akumulátor $min je uvedený nižšie.

>db.Books.aggregate([

{
$group:{
_id:{
title: '$title',
order_status: '$order_status'
},
minPrice:{$min: '$price'}
}
}
])

Dotaz má agregačný výraz „$group“, kde sme dokument zoskupili do polí „názov“ a „stav_objednávky“. Potom sme poskytli akumulátor $ min, ktorý zoskupil dokumenty získaním hodnôt minimálnej ceny z nezoskupených polí. Keď spustíme tento dopyt $min akumulátora nižšie, vráti zoskupené dokumenty podľa názvu a stavu_objednávky v poradí. Minimálna cena sa zobrazí ako prvá a najvyššia cena dokumentu sa umiestni ako posledná.

Príklad č. 4: Využite agregáciu $group s $sum Accumulator

Na získanie súčtu všetkých číselných polí pomocou operátora $ group sa nasadí operácia $ sum accumulator. Tento akumulátor zohľadňuje nečíselné hodnoty v zbierkach. Okrem toho tu používame agregáciu $match s agregáciou $group. Agregácia $match akceptuje podmienky dotazu, ktoré sú uvedené v dokumente, a odovzdá zhodný dokument agregácii $group, ktorá potom vráti súčet dokumentu pre každú skupinu. Pre akumulátor $sum je dopyt uvedený nižšie.

>db.Books.aggregate([

{ $match:{ order_status:'Na sklade'}},

{ $group:{ _id:'$author.name', totalBooks: { $sum:1 } }

}])

Vyššie uvedený dotaz na agregáciu začína operátorom $match, ktorý sa zhoduje so všetkým „stav_objednávky“, ktorého stav je „Na sklade“ a je odovzdaný skupine $ ako vstup. Potom operátor skupiny $ má výraz $sum accumulator, ktorý vypíše súčet všetkých kníh na sklade. Všimnite si, že „$sum:1“ pridá 1 ku každému dokumentu, ktorý patrí do rovnakej skupiny. Výstup zobrazuje iba dva zoskupené dokumenty, ktoré majú „stav_objednávky“ priradený k „Na sklade“.

Príklad č. 5: Použite $group Aggregation s $sort Aggregation

Operátor skupiny $ sa tu používa s operátorom „$sort“, ktorý sa používa na triedenie zoskupených dokumentov. Nasledujúci dotaz má tri kroky k operácii triedenia. Prvá je $zápasová fáza, potom $skupinová fáza a posledná je $trieda fáza, ktorá triedi zoskupený dokument.

>db.Books.aggregate([

{ $match:{ order_status:'out-of-stock'}},

{ $group:{ _id:{ authorName :'$author.name'}, totalBooks: { $sum:1} } },

{ $sort:{ authorName:1}}

])

Tu sme získali priradený dokument, ktorého „stav_objednávky“ nie je na sklade. Potom sa priradený dokument vloží do skupiny $, ktorá zoskupila dokument s poľom „authorName“ a „totalBooks“. Výraz $group je spojený s akumulátorom $sum k celkovému počtu „vypredaných“ kníh. Zoskupené dokumenty sa potom zoradia pomocou výrazu $triediť vo vzostupnom poradí, pretože „1“ tu označuje vzostupné poradie. Zoradený skupinový dokument v zadanom poradí sa získa v nasledujúcom výstupe.

Príklad č. 6: Použite $group agregáciu pre odlišnú hodnotu

Procedúra agregácie tiež zoskupuje dokumenty podľa položiek pomocou operátora $ group na extrahovanie odlišných hodnôt položiek. Majme dotazovací výraz tohto príkazu v MongoDB.

>db.Books.aggregate( [ { $group : { _id : '$title' } } ] ).pretty();

Agregačný dotaz sa použije na kolekciu Knihy, aby sa získala odlišná hodnota skupinového dokumentu. Skupina $ tu preberá výraz _id, ktorý vypíše odlišné hodnoty, pretože sme doň vložili pole „title“. Výstup dokumentu skupiny sa získa pri spustení tohto dotazu, ktorý má skupinu názvov titulov oproti poľu _id.

Záver

Cieľom sprievodcu bolo objasniť koncept operátora agregácie $ group na zoskupenie dokumentu v databáze MongoDB. Agregovaný prístup MongoDB zlepšuje javy zoskupovania. Štruktúra syntaxe operátora $group je demonštrovaná na príkladoch programov. Okrem základného príkladu operátorov skupiny $ sme tohto operátora použili aj s niektorými akumulátormi ako $push, $min, $sum a operátormi ako $match a $sort.