MongoDB Group Aggregation

Mongodb Group Aggregation



Aggregation er proceduren til at udtrække data fra en MongoDB-samling. Den behandler adskillige dokumenter og giver estimerede resultater. Samlingen i MongoDB har flere operatører og metoder, der udfører forskellige opgaver. Blandt disse operatorer grupperer $group-operatoren dokumenterne for hver unik gruppering og arrangerer dem i overensstemmelse med et udtryk, der er defineret. Gruppeoperatøren er vigtig i MongoDB, da den letter en bred vifte af datamanipulationer. $gruppe-sammenlægningen i MongoDB-eksemplet sammen med forskellige akkumulatorer er angivet nedenfor.

Hvordan fungerer gruppesammenlægning i MongoDB?

$group-operatoren skal bruges til at gruppere inputdokumenterne i henhold til det angivne _id-udtryk. Det skal derefter returnere et enkelt dokument med de samlede værdier for hver separat gruppe. Til at begynde med implementeringen har vi lavet 'Bøger'-samlingen i MongoDB. Efter oprettelsen af ​​'Bøger'-samlingen har vi indsat de dokumenter, som er knyttet til de forskellige felter. Dokumenterne indsættes i samlingen via insertMany() metoden, da den forespørgsel, der skal udføres, er vist nedenfor.

>db.Books.insertMany([

{
_id:1,
titel: 'Anna Karenina',
pris: 290,-
år: 1879,
order_status: 'På lager',
forfatter: {
'navn': 'Leo Tolstoj'
}
},
{
_id:2,
titel: 'To Kill a Mockingbird',
pris: 500,-
år: 1960,
order_status: 'ikke på lager',
forfatter: {
'navn': 'Harper Lee'
}
},
{
_id:3,
titel: 'Usynlig mand',
pris: 312,-
år: 1953,
order_status: 'På lager',
forfatter: {
'navn': 'Ralph Ellison'
}
},
{
_id:4,
titel: 'elskede',
pris: 370,-
år: 1873,
ordre_status: 'ikke_på lager',
forfatter: {
'navn': 'Toni Morrison'
}
},
{
_id:5,
titel: 'Tingene falder fra hinanden',
pris: 200,-
år: 1958,
order_status: 'På lager',
forfatter: {
'name':'Chinua Achebe'
}
},
{
_id:6,
titel: 'Farven lilla',
pris: 510,-
år: 1982,
order_status: 'ikke på lager',
forfatter: {
'name': 'Alice Walker'
}
}
])

Dokumenterne gemmes med succes i 'Bøger'-samlingen uden at støde på nogen fejl, fordi outputtet er anerkendt som 'sandt'. Nu skal vi bruge disse dokumenter fra 'Bøger'-samlingen til at udføre '$group'-sammenlægningen.









Eksempel # 1: Brug af $group Aggregation



Den simple brug af $group-sammenlægningen er demonstreret her. Den samlede forespørgsel indtaster først '$group'-operatoren, derefter tager '$group'-operatoren yderligere udtrykkene for at generere de grupperede dokumenter.





>db.Books.aggregate([

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

])

Forespørgslen ovenfor for $group-operatoren er angivet med '_id'-feltet for at beregne de samlede værdier for alle inputdokumenter. Derefter tildeles '_id'-feltet '$author.name', som danner en anden gruppe på '_id'-feltet. De separate værdier af $author.name vil blive returneret, fordi vi ikke beregner nogen akkumulerede værdier. Udførelsen af ​​$group aggregeret forespørgsel har følgende output. Feltet _id har værdierne for forfatter.navne.



Eksempel # 2: Brug af $group aggregation med $push-akkumulatoren

Eksemplet med $group aggregering bruger enhver akkumulator, som allerede er nævnt ovenfor. Men vi kan bruge akkumulatorerne i $group aggregering. Akkumulatoroperatorerne er dem, der bruges på andre inputdokumentfelter end dem, der er 'grupperet' under '_id'. Lad os antage, at vi ønsker at skubbe udtrykkets felter ind i et array, så kaldes '$push'-akkumulatoren ud i '$group'-operatoren. Eksemplet hjælper dig med at forstå '$push'-akkumulatoren i '$gruppen' mere tydeligt.

>db.Books.aggregate(

[

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

]

).smuk();

Her ønsker vi at gruppere udgivelsesåret for de givne bøger i arrayet. Ovenstående forespørgsel skal anvendes for at opnå dette. Aggregeringsforespørgslen er forsynet med udtrykket, hvor '$group'-operatoren tager feltudtrykket '_id' og 'year'-feltudtrykket for at få gruppeåret ved hjælp af $push-akkumulatoren. Det output, der hentes fra denne specifikke forespørgsel, opretter arrayet af årsfelter og gemmer det returnerede grupperede dokument inde i det.

Eksempel # 3: Brug af $group Aggregation med '$min'-akkumulatoren

Dernæst har vi '$min'-akkumulatoren, som bruges i $group-sammenlægningen for at få den mindste matchende værdi fra hvert dokument i samlingen. Forespørgselsudtrykket for $min-akkumulatoren er angivet nedenfor.

>db.Books.aggregate([

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

Forespørgslen har '$group' aggregeringsudtrykket, hvor vi har grupperet dokumentet for felterne 'title' og 'order_status'. Derefter leverede vi $min-akkumulatoren, som grupperede dokumenterne ved at hente minimumsprisværdierne fra de ikke-grupperede felter. Når vi kører denne forespørgsel af $min akkumulator nedenfor, returnerer den de grupperede dokumenter efter titel og order_status i en sekvens. Minimumsprisen vises først, og den højeste pris for dokumentet placeres sidst.

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

For at få summen af ​​alle de numeriske felter ved hjælp af $group-operatoren, implementeres $sum-akkumulatoroperationen. De ikke-numeriske værdier i samlingerne tages i betragtning af denne akkumulator. Derudover bruger vi $match-sammenlægningen her med $group-sammenlægningen. $match-aggregationen accepterer forespørgselsbetingelserne, der er angivet i et dokument, og sender det matchede dokument til $group-aggregationen, som derefter returnerer summen af ​​dokumentet for hver gruppe. For $sum-akkumulatoren præsenteres forespørgslen nedenfor.

>db.Books.aggregate([

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

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

}])

Ovenstående forespørgsel om aggregering begynder med $match-operatoren, som matcher alle 'ordre_status', hvis status er 'På lager', og sendes til $gruppen som input. Derefter har $gruppe-operatoren $sumakkumulatorudtrykket, som udlæser summen af ​​alle bøgerne i aktien. Bemærk, at '$sum:1' tilføjer 1 til hvert dokument, der tilhører den samme gruppe. Outputtet her viste kun to grupperede dokumenter, der har 'ordre_status' forbundet med 'På lager'.

Eksempel # 5: Brug $group Aggregation med $sort Aggregation

$group-operatoren her bruges sammen med '$sort'-operatoren, som bruges til at sortere de grupperede dokumenter. Den følgende forespørgsel har tre trin til sorteringsoperationen. Først er $match-stadiet, derefter $group-stadiet, og sidst er $sort-fasen, som sorterer det grupperede dokument.

>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 matchede dokument, hvis 'ordre_status' er udsolgt. Derefter indtastes det matchede dokument i $group-stadiet, som grupperede dokumentet med feltet 'authorName' og 'totalBooks'. $group-udtrykket er knyttet til $sum-akkumulatoren til det samlede antal 'udsolgte'-bøger. De grupperede dokumenter sorteres derefter med $sort-udtrykket i stigende rækkefølge, da '1' her angiver den stigende rækkefølge. Det sorterede gruppedokument i den angivne rækkefølge fås i følgende output.

Eksempel # 6: Brug $group Aggregation for Distinct Value

Aggregeringsproceduren grupperer også dokumenterne efter vare ved hjælp af $group-operatoren til at udtrække de forskellige vareværdier. Lad os få forespørgselsudtrykket for denne erklæring i MongoDB.

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

Aggregeringsforespørgslen anvendes på bogsamlingen for at få den distinkte værdi af gruppedokumentet. $gruppen her tager _id-udtrykket, som udsender de forskellige værdier, som vi har indtastet 'title'-feltet til det. Outputtet fra gruppedokumentet opnås ved kørsel af denne forespørgsel, som har gruppen af ​​titelnavne mod feltet _id.

Konklusion

Vejledningen havde til formål at rydde konceptet med $group-aggregationsoperatoren til at gruppere dokumentet i MongoDB-databasen. Den samlede MongoDB-tilgang forbedrer grupperingsfænomenerne. Syntaksstrukturen for $group-operatoren er demonstreret med eksempelprogrammerne. Ud over det grundlæggende eksempel på $gruppeoperatorerne har vi også brugt denne operator med nogle akkumulatorer som $push, $min, $sum og operatorer som $match og $sort.