Agregace skupiny MongoDB

Agregace Skupiny Mongodb



Agregace je postup extrahování dat z kolekce MongoDB. Zpracovává řadu dokumentů a poskytuje odhadované výsledky. Agregace v MongoDB má několik operátorů a metod, které provádějí různé úkoly. Mezi těmito operátory operátor $group seskupuje dokumenty pro každé jedinečné seskupení a uspořádává je podle definovaného výrazu. Operátor skupiny je v MongoDB významný, protože umožňuje širokou škálu manipulací s daty. Agregace $group v příkladu MongoDB spolu s různými akumulátory je uvedena níže.

Jak funguje agregace skupin v MongoDB?

Operátor $group by měl být použit k seskupení vstupních dokumentů podle zadaného výrazu _id. Poté by měl vrátit jeden dokument s celkovými hodnotami pro každou samostatnou skupinu. Pro začátek implementace jsme v MongoDB vytvořili kolekci „Knihy“. Po vytvoření sbírky „Knihy“ jsme vložili dokumenty, které jsou přidruženy k různým polím. Dokumenty se do kolekce vkládají pomocí metody insertMany(), jak je níže zobrazen dotaz, který se má provést.

>db.Books.insertMany([

{
_id:1,
název: 'Anna Karenina',
cena: 290,-
rok: 1879,
order_status: 'Skladem',
autor: {
'name':'Leo Tolstoy'
}
},
{
_id:2,
název: 'To Kill a Mockingbird',
cena: 500,-
rok: 1960,
order_status: 'není skladem',
autor: {
'name':'Harper Lee'
}
},
{
_id:3,
název: 'Neviditelný muž',
cena: 312,-
rok: 1953,
order_status: 'Skladem',
autor: {
'name':'Ralph Ellison'
}
},
{
_id:4,
název: 'Milovaný',
cena: 370,-
rok: 1873,
order_status: 'out_of_stock',
autor: {
'name':'Toni Morrison'
}
},
{
_id:5,
název: 'Věci se rozpadají',
cena: 200,-
rok: 1958,
order_status: 'Skladem',
autor: {
'name':'Chinua Achebe'
}
},
{
_id:6,
název: 'Fialová barva',
cena: 510,-
rok: 1982,
order_status: 'není skladem',
autor: {
'name':'Alice Walker'
}
}
])

Dokumenty jsou úspěšně uloženy do kolekce „Knihy“, aniž by došlo k jakékoli chybě, protože výstup je potvrzen jako „pravdivý“. Nyní použijeme tyto dokumenty z kolekce „Books“ k provedení agregace „$group“.









Příklad č. 1: Použití $group Agregation



Zde je ukázáno jednoduché použití agregace $group. Souhrnný dotaz nejprve zadá operátor „$group“ a poté operátor „$group“ dále přebírá výrazy pro generování seskupených dokumentů.





>db.Books.aggregate([

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

])

Výše uvedený dotaz operátoru $group je specifikován pomocí pole „_id“ pro výpočet celkových hodnot pro všechny vstupní dokumenty. Poté je pole „_id“ přiřazeno „$author.name“, které tvoří jinou skupinu v poli „_id“. Samostatné hodnoty $author.name budou vráceny, protože nepočítáme žádné akumulované hodnoty. Provedení agregačního dotazu $group má následující výstup. Pole _id obsahuje hodnoty jméno autora.



Příklad č. 2: Použití $group Agregation s $push Accumulator

Příklad agregace $group používá jakýkoli akumulátor, který je již zmíněn výše. Ale můžeme použít akumulátory v $group agregaci. Akumulátorové operátory jsou ty, které se používají v polích vstupních dokumentů jiných než těch, které jsou „seskupeny“ pod „_id“. Předpokládejme, že chceme vložit pole výrazu do pole, pak se v operátoru „$group“ vyvolá akumulátor „$push“. Tento příklad vám pomůže lépe pochopit „$push“ akumulátor skupiny „$group“.

>db.Books.aggregate(

[

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

]

).dosti();

Zde chceme seskupit datum zveřejnění roku daných knih v poli. K tomu je třeba použít výše uvedený dotaz. Agregační dotaz je opatřen výrazem, kde operátor „$group“ přebírá výraz pole „_id“ a výraz pole „year“, aby získal rok skupiny pomocí akumulátoru $push. Výstup získaný z tohoto konkrétního dotazu vytvoří pole roků a uloží do něj vrácený seskupený dokument.

Příklad č. 3: Použití agregace $group s „$min“ akumulátorem

Dále máme „$min“ akumulátor, který se používá v agregaci $group k získání minimální odpovídající hodnoty z každého dokumentu v kolekci. Dotazový výraz pro akumulátor $min je uveden níže.

>db.Books.aggregate([

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

Dotaz má agregační výraz „$group“, kde jsme seskupili dokument pro pole „title“ a „order_status“. Poté jsme poskytli akumulátor $ min, který seskupoval dokumenty tak, že z neseskupených polí získal hodnoty minimální ceny. Když spustíme tento dotaz $min akumulátoru níže, vrátí seskupené dokumenty podle názvu a stavu_objednávky v sekvenci. Minimální cena se zobrazí jako první a nejvyšší cena dokumentu je umístěna jako poslední.

Příklad č. 4: Použijte $group Agregation s $sum Accumulator

Chcete-li získat součet všech číselných polí pomocí operátoru $group, je nasazena operace $sum accumulator. Tento akumulátor bere v úvahu nečíselné hodnoty v kolekcích. Kromě toho zde používáme agregaci $match s agregací $group. Agregace $match přijímá podmínky dotazu, které jsou uvedeny v dokumentu, a předá seřazený dokument agregaci $group, která pak vrátí součet dokumentu pro každou skupinu. Pro akumulátor $sum je dotaz uveden níže.

>db.Books.aggregate([

{ $match:{ order_status:'Skladem'}},

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

}])

Výše uvedený dotaz na agregaci začíná operátorem $match, který odpovídá všem „stav_objednávky“, jejichž stav je „Skladem“ a předává se skupině $ jako vstup. Operátor $group má potom výraz $sum accumulator, který vydává součet všech knih na skladě. Všimněte si, že „$sum:1“ přidá 1 ke každému dokumentu, který patří do stejné skupiny. Výstup zde ukázal pouze dva seskupené dokumenty, které mají 'order_status' spojený s 'In-Stock'.

Příklad č. 5: Použijte $group Aggregation s $sort Aggregation

Operátor $group se zde používá s operátorem „$sort“, který se používá k řazení seskupených dokumentů. Následující dotaz má tři kroky k operaci řazení. První je $match fáze, potom $group fáze a poslední je $sort fáze, která třídí seskupený dokument.

>db.Books.aggregate([

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

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

{ $sort:{ authorName:1}}

])

Zde jsme načetli odpovídající dokument, jehož „stav_objednávky“ není na skladě. Poté je přiřazený dokument vložen do $skupinové fáze, která seskupila dokument s polem „authorName“ a „totalBooks“. Výraz $group je spojen s akumulátorem $sum k celkovému počtu knih „není skladem“. Seskupené dokumenty jsou pak seřazeny pomocí výrazu $třídění ve vzestupném pořadí, protože „1“ zde označuje vzestupné pořadí. Seřazený dokument skupiny v zadaném pořadí se získá v následujícím výstupu.

Příklad č. 6: Použijte agregaci $group pro odlišnou hodnotu

Procedura agregace také seskupuje dokumenty podle položky pomocí operátoru $group k extrahování odlišných hodnot položek. Mějme dotazovací výraz tohoto příkazu v MongoDB.

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

Agregační dotaz se použije na kolekci Books, aby získal odlišnou hodnotu dokumentu skupiny. Skupina $ zde přebírá výraz _id, který vydává odlišné hodnoty, protože jsme do něj vložili pole „title“. Výstup dokumentu skupiny se získá při spuštění tohoto dotazu, který má skupinu názvů titulů proti poli _id.

Závěr

Cílem průvodce bylo objasnit koncept operátoru agregace $group pro seskupování dokumentu v databázi MongoDB. Agregovaný přístup MongoDB zlepšuje jevy seskupování. Struktura syntaxe operátoru $group je demonstrována na příkladech programů. Kromě základního příkladu operátorů $group jsme tento operátor použili také s některými akumulátory jako $push, $min, $sum a operátory jako $match a $sort.