MongoDB Group Aggregation

Mongodb Group Aggregation



Aggregering er prosedyren for å trekke ut data fra en MongoDB-samling. Den behandler en rekke dokumenter og gir estimerte resultater. Aggregeringen i MongoDB har flere operatører og metoder som utfører ulike oppgaver. Blant disse operatørene grupperer $group-operatøren dokumentene for hver unike gruppering og ordner dem i henhold til et uttrykk som er definert. Gruppeoperatøren er betydelig i MongoDB siden den muliggjør et bredt spekter av datamanipulasjoner. $gruppe-aggregeringen i MongoDB-eksemplet sammen med forskjellige akkumulatorer er gitt nedenfor.

Hvordan fungerer gruppeaggregasjon i MongoDB?

$group-operatoren skal brukes til å gruppere inndatadokumentene i henhold til det spesifiserte _id-uttrykket. Den skal da returnere et enkelt dokument med de totale verdiene for hver separat gruppe. For å begynne med implementeringen har vi laget «Bøker»-samlingen i MongoDB. Etter opprettelsen av «Bøker»-samlingen har vi satt inn dokumentene som er knyttet til de forskjellige feltene. Dokumentene settes inn i samlingen via insertMany()-metoden ettersom spørringen som skal utføres vises nedenfor.

>db.Books.insertMany([

{
_id:1,
tittel: 'Anna Karenina',
pris: 290,-
år: 1879,
order_status: 'På lager',
forfatter: {
'name': 'Leo Tolstoy'
}
},
{
_id:2,
tittel: 'To Kill a Mockingbird',
pris: 500,-
år: 1960,
order_status: 'ikke på lager',
forfatter: {
'navn': 'Harper Lee'
}
},
{
_id:3,
tittel: 'Usynlig mann',
pris: 312,-
år: 1953,
order_status: 'På lager',
forfatter: {
'name': 'Ralph Ellison'
}
},
{
_id:4,
tittel: 'Elskede',
pris: 370,-
år: 1873,
order_status: 'ikke_på lager',
forfatter: {
'name': 'Toni Morrison'
}
},
{
_id:5,
tittel: 'Ting faller fra hverandre',
pris: 200,-
år: 1958,
order_status: 'På lager',
forfatter: {
'name': 'Chinua Achebe'
}
},
{
_id:6,
tittel: 'Fargen lilla',
pris: 510,-
år: 1982,
order_status: 'ikke på lager',
forfatter: {
'name': 'Alice Walker'
}
}
])

Dokumentene lagres vellykket i 'Bøker'-samlingen uten å støte på noen feil fordi utgangen er bekreftet som 'sann'. Nå skal vi bruke disse dokumentene i 'Books'-samlingen for å utføre '$group'-aggregeringen.









Eksempel # 1: Bruk av $group Aggregation



Den enkle bruken av $group-aggregeringen er demonstrert her. Den samlede spørringen legger inn '$group'-operatoren først og deretter '$group'-operatoren tar uttrykkene videre for å generere de grupperte dokumentene.





>db.Books.aggregate([

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

])

Spørringen ovenfor til $group-operatøren er spesifisert med '_id'-feltet for å beregne de totale verdiene for alle inndatadokumenter. Deretter tildeles '_id'-feltet '$author.name' som danner en annen gruppe på '_id'-feltet. De separate verdiene til $author.name vil bli returnert fordi vi ikke beregner noen akkumulerte verdier. Utførelsen av $group aggregert spørring har følgende utgang. _id-feltet har verdiene for forfatter.navn.



Eksempel # 2: Bruk av $group Aggregation med $push Accumulator

Eksemplet med $group aggregering bruker en hvilken som helst akkumulator som allerede er nevnt ovenfor. Men vi kan bruke akkumulatorene i $gruppeaggregering. Akkumulatoroperatorene er de som brukes på andre dokumentfelt enn de som er 'gruppert' under '_id'. La oss anta at vi ønsker å skyve uttrykkets felt inn i en matrise, så kalles '$push'-akkumulatoren opp i '$group'-operatoren. Eksemplet vil hjelpe deg å forstå '$push'-akkumulatoren til '$gruppen' klarere.

>db.Books.aggregate(

[

{ $group : { _id : '$_id', år: { $push: '$year' } } }

]

).ganske();

Her ønsker vi å gruppere publiseringsårsdatoen for de gitte bøkene i matrisen. Spørsmålet ovenfor bør brukes for å oppnå dette. Aggregeringsspørringen leveres med uttrykket der '$group'-operatoren tar feltuttrykket '_id' og 'year'-feltuttrykket for å få gruppeåret ved å bruke $push-akkumulatoren. Utdataene som hentes fra denne spesifikke spørringen, oppretter utvalget av årfelt og lagrer det returnerte grupperte dokumentet i det.

Eksempel # 3: Bruk av $group Aggregation med '$min'-akkumulatoren

Deretter har vi '$min'-akkumulatoren som brukes i $group-aggregeringen for å få den minste samsvarende verdien fra hvert dokument i samlingen. Spørringsuttrykket for $min-akkumulatoren er gitt nedenfor.

>db.Books.aggregate([

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

Spørringen har '$group' aggregeringsuttrykket der vi har gruppert dokumentet for feltene 'title' og 'order_status'. Deretter ga vi $min-akkumulatoren som grupperte dokumentene ved å hente minimumsprisverdiene fra de ugrupperte feltene. Når vi kjører denne spørringen av $min akkumulator nedenfor, returnerer den de grupperte dokumentene etter tittel og order_status i en sekvens. Minimumsprisen vises først, og den høyeste prisen på dokumentet plasseres sist.

Eksempel # 4: Bruk $group Aggregation med $sum Akkumulator

For å få summen av alle de numeriske feltene ved å bruke $group-operatoren, distribueres $sum-akkumulatoroperasjonen. De ikke-numeriske verdiene i samlingene vurderes av denne akkumulatoren. I tillegg bruker vi $match-aggregeringen her med $group-aggregeringen. $match-aggregeringen godtar spørringsbetingelsene som er gitt i et dokument og sender det samsvarende dokumentet til $group-aggregeringen som deretter returnerer summen av dokumentet for hver gruppe. For $sum-akkumulatoren presenteres spørringen nedenfor.

>db.Books.aggregate([

{ $match:{ order_status:'På lager'}},

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

}])

Aggregeringsspørsmålet ovenfor begynner med $match-operatoren som samsvarer med alle 'order_status' hvis status er 'In-Stock' og sendt til $gruppen som input. Deretter har $gruppeoperatoren $sumakkumulatoruttrykket som gir ut summen av alle bøkene i aksjen. Merk at '$sum:1' legger til 1 til hvert dokument som tilhører samme gruppe. Utdataene her viste bare to grupperte dokumenter som har 'ordre_status' knyttet til 'På lager'.

Eksempel # 5: Bruk $group Aggregation med $sort Aggregasjon

$group-operatoren her brukes med '$sort'-operatoren som brukes til å sortere de grupperte dokumentene. Følgende spørring har tre trinn til sorteringsoperasjonen. Først er $match-stadiet, deretter $group-stadiet, og sist er $sort-stadiet som sorterer det grupperte dokumentet.

>db.Books.aggregate([

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

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

{ $sort:{ authorName:1}}

])

Her har vi hentet det samsvarende dokumentet hvis 'ordre_status' er utsolgt. Deretter legges det samsvarende dokumentet inn i $group-stadiet som grupperte dokumentet med feltet 'authorName' og 'totalBooks'. $group-uttrykket er assosiert med $sum-akkumulatoren til totalt antall «ikke-på-lager»-bøker. De grupperte dokumentene blir deretter sortert med $sort-uttrykket i stigende rekkefølge, da '1' her indikerer stigende rekkefølge. Det sorterte gruppedokumentet i den angitte rekkefølgen hentes i følgende utdata.

Eksempel # 6: Bruk $group Aggregation for Distinct Value

Aggregeringsprosedyren grupperer også dokumentene etter vare ved å bruke $group-operatoren for å trekke ut de distinkte vareverdiene. La oss ha spørringsuttrykket til denne uttalelsen i MongoDB.

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

Aggregeringsspørringen brukes på Bøker-samlingen for å få den distinkte verdien av gruppedokumentet. $gruppen her tar _id-uttrykket som gir ut de distinkte verdiene ettersom vi har skrevet inn 'tittel'-feltet til det. Utdata fra gruppedokumentet oppnås når du kjører denne spørringen som har gruppen med tittelnavn mot _id-feltet.

Konklusjon

Veiledningen hadde som mål å fjerne konseptet med $group aggregeringsoperatoren for å gruppere dokumentet i MongoDB-databasen. Den aggregerte MongoDB-tilnærmingen forbedrer grupperingsfenomenene. Syntaksstrukturen til $group-operatoren er demonstrert med eksempelprogrammene. I tillegg til det grunnleggende eksemplet med $gruppe-operatorene, har vi også brukt denne operatoren med noen akkumulatorer som $push, $min, $sum og operatorer som $match og $sort.