MongoDB grupna agregacija

Mongodb Grupna Agregacija



Agregacija je postupak izdvajanja podataka iz MongoDB zbirke. Obrađuje brojne dokumente i daje procijenjene rezultate. Agregacija u MongoDB-u ima nekoliko operatora i metoda koje izvršavaju različite zadatke. Među tim operatorima, operator $group grupira dokumente za svako jedinstveno grupiranje i raspoređuje ih prema izrazu koji je definiran. Operator grupe značajan je u MongoDB-u budući da olakšava širok raspon manipulacija podacima. $group agregacija u primjeru MongoDB zajedno s različitim akumulatorima navedena je u nastavku.

Kako radi grupna agregacija u MongoDB-u?

Operator $group trebao bi se koristiti za grupiranje ulaznih dokumenata prema navedenom izrazu _id. Zatim bi trebao vratiti jedan dokument s ukupnim vrijednostima za svaku zasebnu grupu. Za početak implementacije, kreirali smo kolekciju “Knjige” u MongoDB-u. Nakon izrade zbirke 'Knjige', umetnuli smo dokumente koji su povezani s različitim poljima. Dokumenti se umeću u kolekciju putem metode insertMany() jer je upit koji treba izvršiti prikazan u nastavku.

>db.Books.insertMany([

{
_id:1,
naslov: 'Ana Karenjina',
cijena: 290 kn
godina: 1879,
status_ordera: 'Na skladištu',
Autor: {
'ime': 'Lav Tolstoj'
}
},
{
_id:2,
naslov: 'Ubiti pticu rugalicu',
cijena: 500,
godina:  1960,
status_narudžbe: 'nema na skladištu',
Autor: {
'ime': 'Harper Lee'
}
},
{
_id:3,
naslov: 'Nevidljivi čovjek',
cijena: 312,
godina: 1953.,
status_ordera: 'Na skladištu',
Autor: {
'ime': 'Ralph Ellison'
}
},
{
_id:4,
naslov: 'Voljeni',
cijena: 370 kn
godina:  1873,
status_narudžbe: 'van_na_lageru',
Autor: {
'ime': 'Toni Morrison'
}
},
{
_id:5,
naslov: 'Stvari se raspadaju',
cijena: 200,
godina:  1958,
status_ordera: 'Na skladištu',
Autor: {
'ime': 'Chinua Achebe'
}
},
{
_id:6,
naslov: 'Purpurna boja',
cijena: 510,
godina:  1982,
status_narudžbe: 'nema na skladištu',
Autor: {
'ime': 'Alice Walker'
}
}
])

Dokumenti su uspješno pohranjeni u kolekciju 'Knjige' bez ikakvih grešaka jer se izlaz priznaje kao 'istinit'. Sada ćemo koristiti ove dokumente zbirke 'Knjige' za izvođenje agregacije '$group'.









Primjer # 1: Upotreba agregacije $group



Ovdje je prikazana jednostavna upotreba agregacije $group. Zbirni upit prvo unosi operator “$group”, a zatim operator “$group” dalje uzima izraze za generiranje grupiranih dokumenata.





>db.Books.aggregate([

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

])

Gornji upit operatora $group naveden je s poljem “_id” za izračunavanje ukupnih vrijednosti za sve ulazne dokumente. Zatim se polje “_id” dodjeljuje s “$author.name” koji čini drugu grupu u polju “_id”. Odvojene vrijednosti $author.name bit će vraćene jer ne izračunavamo nikakve akumulirane vrijednosti. Izvršenje agregatnog upita $group ima sljedeći izlaz. Polje _id ima vrijednosti autora.imena.



Primjer # 2: Upotreba agregacije $group s $push akumulatorom

Primjer $group agregacije koristi bilo koji akumulator koji je već spomenut gore. Ali možemo koristiti akumulatore u $group agregaciji. Operatori akumulatora su oni koji se koriste u poljima ulaznog dokumenta osim onih koja su “grupirana” pod “_id”. Pretpostavimo da želimo gurnuti polja izraza u niz, a zatim se poziva akumulator '$push' u operatoru '$group'. Primjer će vam pomoći da jasnije razumijete “$push” akumulator “$group”.

>db.Books.aggregate(

[

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

]

).prilično();

Ovdje želimo grupirati datum izdane godine danih knjiga u nizu. Gornji upit treba primijeniti da bi se to postiglo. Upit za agregaciju pruža se s izrazom gdje operator “$group” uzima izraz polja “_id” i izraz polja “year” kako bi dobio godinu grupe pomoću $push akumulatora. Izlaz dohvaćen iz ovog specifičnog upita stvara niz polja godina i unutar njega pohranjuje vraćeni grupirani dokument.

Primjer # 3: Upotreba agregacije $group s akumulatorom “$min”.

Zatim, imamo “$min” akumulator koji se koristi u agregaciji $group za dobivanje minimalne podudarne vrijednosti iz svakog dokumenta u zbirci. Izraz upita za $min akumulator naveden je u nastavku.

>db.Books.aggregate([

{
$group:{
_iskaznica:{
naslov: '$naslov',
status_narudžbe: '$status_narudžbe'
},
minPrice:{$min: '$price'}
}
}
])

Upit ima agregacijski izraz “$group” gdje smo grupirali dokument za polja “title” i “order_status”. Zatim smo osigurali $min akumulator koji je grupirao dokumente dobivanjem minimalnih vrijednosti cijena iz negrupiranih polja. Kada pokrenemo ovaj upit $min akumulatora u nastavku, on vraća grupirane dokumente prema naslovu i statusu_narudžbe u nizu. Prvo se pojavljuje najniža cijena, a zadnja najviša cijena dokumenta.

Primjer # 4: Koristite agregaciju $group s akumulatorom $sum

Da biste dobili zbroj svih numeričkih polja pomoću operatora $group, primjenjuje se operacija akumulatora $sum. Ovaj akumulator uzima u obzir nenumeričke vrijednosti u zbirkama. Osim toga, ovdje koristimo agregaciju $match s agregacijom $group. $match agregacija prihvaća uvjete upita koji su dani u dokumentu i prosljeđuje podudarni dokument agregaciji $group koja zatim vraća zbroj dokumenta za svaku grupu. Za $sum akumulator, upit je prikazan u nastavku.

>db.Books.aggregate([

{ $match:{ order_status:'In-Stock'}},

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

}])

Gore navedeni upit agregacije počinje s operatorom $match koji odgovara svim 'order_statusima' čiji je status 'In-Stock' i prosljeđuje se $group kao ulaz. Tada operator $group ima izraz akumulatora $sum koji daje zbroj svih knjiga u zalihi. Imajte na umu da “$sum:1” dodaje 1 svakom dokumentu koji pripada istoj grupi. Izlaz je ovdje pokazao samo dva grupirana dokumenta koji imaju 'order_status' povezan s 'In-Stock'.

Primjer # 5: Koristite agregaciju $group s agregacijom $sort

Operator $group ovdje se koristi s operatorom “$sort” koji se koristi za sortiranje grupiranih dokumenata. Sljedeći upit ima tri koraka za operaciju sortiranja. Prva je faza $match, zatim faza $group, a zadnja je faza $sort koja sortira grupirani dokument.

>db.Books.aggregate([

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

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

{ $sort:{ authorName:1}}

])

Ovdje smo dohvatili odgovarajući dokument čiji je 'status_narudžbe' rasprodan. Zatim se podudarni dokument unosi u fazu $group koja grupira dokument s poljem 'authorName' i 'totalBooks'. Izraz $group povezan je s akumulatorom $sum ukupnog broja knjiga 'nema na zalihama'. Grupirani dokumenti se zatim sortiraju pomoću izraza $sort uzlaznim redoslijedom jer '1' ovdje označava uzlazni redoslijed. Dokument sortirane grupe navedenim redoslijedom dobiva se u sljedećem izlazu.

Primjer # 6: Koristite agregaciju $group za različite vrijednosti

Postupak združivanja također grupira dokumente po stavkama pomoću operatora $group za izdvajanje različitih vrijednosti stavki. Neka nam bude izraz upita ove izjave u MongoDB-u.

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

Upit združivanja primjenjuje se na zbirku knjiga kako bi se dobila posebna vrijednost grupnog dokumenta. $group ovdje uzima izraz _id koji daje različite vrijednosti jer smo unijeli polje 'title' u njega. Izlaz grupnog dokumenta dobiva se nakon pokretanja ovog upita koji ima grupu naziva naslova u odnosu na polje _id.

Zaključak

Vodič je imao za cilj razjasniti koncept operatora agregacije $group za grupiranje dokumenta u MongoDB bazi podataka. MongoDB agregatni pristup poboljšava fenomen grupiranja. Struktura sintakse operatora $group prikazana je s primjerima programa. Uz osnovni primjer operatora $group, također smo koristili ovaj operator s nekim akumulatorima kao što su $push, $min, $sum i operatorima kao što su $match i $sort.