MongoDB-groepsaggregatie

Mongodb Groepsaggregatie



Aggregatie is de procedure voor het extraheren van gegevens uit een MongoDB-verzameling. Het verwerkt talloze documenten en geeft geschatte resultaten. De aggregatie in MongoDB heeft verschillende operators en methoden die verschillende taken uitvoeren. Onder die operatoren groepeert de operator $group de documenten voor elke unieke groepering en rangschikt ze volgens een gedefinieerde uitdrukking. De groepsoperator is belangrijk in MongoDB omdat deze een breed scala aan gegevensmanipulaties mogelijk maakt. De $group-aggregatie in het MongoDB-voorbeeld samen met verschillende accumulatoren wordt hieronder gegeven.

Hoe werkt groepsaggregatie in MongoDB?

De operator $group moet worden gebruikt om de invoerdocumenten te groeperen volgens de opgegeven _id-expressie. Het zou dan een enkel document moeten retourneren met de totale waarden voor elke afzonderlijke groep. Om te beginnen met de implementatie hebben we de collectie 'Boeken' gemaakt in MongoDB. Na het aanmaken van de collectie 'Boeken', hebben we de documenten ingevoegd die aan de verschillende velden zijn gekoppeld. De documenten worden ingevoegd in de verzameling via de methode insertMany() aangezien de uit te voeren query hieronder wordt weergegeven.

>db.Books.insertMany([

{
_id:1,
titel: 'Anna Karenina',
prijs: 290,
jaar: 1879,
order_status: 'Op voorraad',
schrijver: {
'name':'Leo Tolstoj'
}
},
{
_id:2,
titel: 'Een spotlijster doden',
prijs: 500,
jaar: 1960,
order_status: 'niet op voorraad',
schrijver: {
'name':'Harper Lee'
}
},
{
_id:3,
titel: 'Onzichtbare Man',
prijs: 312,
jaar: 1953,
order_status: 'Op voorraad',
schrijver: {
'name':'Ralph Ellison'
}
},
{
_id:4,
titel: 'Geliefde',
prijs: 370,
jaar: 1873,
order_status: 'out_of_stock',
schrijver: {
'name':'Toni Morrison'
}
},
{
_id:5,
titel: 'Dingen vallen uit elkaar',
prijs: 200,
jaar: 1958,
order_status: 'Op voorraad',
schrijver: {
'name':'Chinua Achebe'
}
},
{
_id:6,
titel: 'De kleur paars',
prijs: 510,
jaar: 1982,
order_status: 'niet op voorraad',
schrijver: {
'name':'Alice Walker'
}
}
])

De documenten zijn met succes opgeslagen in de verzameling 'Boeken' zonder enige fout, omdat de uitvoer als 'waar' wordt erkend. Nu gaan we deze documenten van de 'Books' -collectie gebruiken voor het uitvoeren van de '$ group' -aggregatie.









Voorbeeld # 1: gebruik van $group Aggregation



Het eenvoudige gebruik van de $group-aggregatie wordt hier gedemonstreerd. De geaggregeerde query voert eerst de '$group'-operator in, waarna de '$group'-operator verder de uitdrukkingen gebruikt om de gegroepeerde documenten te genereren.





>db.Books.aggregate([

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

])

De bovenstaande query van de operator $group wordt gespecificeerd met het veld '_id' om de totale waarden voor alle invoerdocumenten te berekenen. Vervolgens wordt het veld '_id' toegewezen aan de '$author.name' die een andere groep vormt op het veld '_id'. De afzonderlijke waarden van $author.name worden geretourneerd omdat we geen geaccumuleerde waarden berekenen. De uitvoering van de aggregatiequery $group heeft de volgende uitvoer. Het veld _id bevat waarden van de author.names.



Voorbeeld # 2: Gebruik van $group Aggregation met de $push Accumulator

Het voorbeeld van $group-aggregatie gebruikt elke accumulator die hierboven al is genoemd. Maar we kunnen de accumulatoren gebruiken in $group-aggregatie. De accumulator-operatoren zijn degene die worden gebruikt op andere invoerdocumentvelden dan die zijn 'gegroepeerd' onder '_id'. Laten we aannemen dat we de velden van de uitdrukking in een array willen pushen, dan wordt de '$push' -accumulator opgeroepen in de '$ group' -operator. Het voorbeeld zal u helpen de '$push'-accumulator van de '$group' duidelijker te begrijpen.

>db.Books.aggregate(

[

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

]

).mooi();

Hier willen we de gepubliceerde jaardatum van de gegeven boeken in de array groeperen. De bovenstaande query moet worden toegepast om dit te bereiken. De aggregatiequery wordt geleverd met de expressie waarbij de operator '$group' de veldexpressie '_id' en de veldexpressie 'year' gebruikt om het groepsjaar te krijgen met behulp van de $push accumulator. De uitvoer die uit deze specifieke query wordt opgehaald, maakt de reeks jaarvelden en slaat het geretourneerde gegroepeerde document erin op.

Voorbeeld # 3: Gebruik van $group Aggregation met de '$min' Accumulator

Vervolgens hebben we de '$min'-accumulator die wordt gebruikt in de $group-aggregatie om de minimale overeenkomende waarde te krijgen van elk document in de verzameling. De query-expressie voor de $min-accumulator wordt hieronder gegeven.

>db.Books.aggregate([

{
$groep:{
_ID kaart:{
titel: '$titel',
order_status: '$order_status'
},
minPrice:{$min: '$price'}
}
}
])

De query heeft de aggregatie-expressie '$group', waarbij we het document hebben gegroepeerd voor de velden 'title' en 'order_status'. Vervolgens hebben we de $min-accumulator geleverd die de documenten groepeerde door de minimumprijswaarden uit de niet-gegroepeerde velden te halen. Wanneer we deze query van $min accumulator hieronder uitvoeren, retourneert het de gegroepeerde documenten op titel en order_status in een reeks. De minimumprijs verschijnt als eerste en de hoogste prijs van het document wordt als laatste geplaatst.

Voorbeeld # 4: Gebruik de $group Aggregation met de $sum Accumulator

Om de som van alle numerieke velden te krijgen met behulp van de operator $group, wordt de bewerking $sum accumulator geïmplementeerd. De niet-numerieke waarden in de verzamelingen worden door deze accumulator in aanmerking genomen. Daarnaast gebruiken we hier de $match-aggregatie met de $group-aggregatie. De $match-aggregatie accepteert de queryvoorwaarden die in een document worden gegeven en geeft het overeenkomende document door aan de $group-aggregatie die vervolgens de som van het document voor elke groep retourneert. Voor de $sum-accumulator wordt de query hieronder weergegeven.

>db.Books.aggregate([

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

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

}])

De bovenstaande aggregatiequery begint met de $match-operator die overeenkomt met alle 'order_status' waarvan de status 'In-Stock' is en wordt doorgegeven aan de $group als invoer. Vervolgens heeft de $group-operator de $sum accumulator-expressie die de som van alle boeken in de voorraad uitvoert. Merk op dat de '$sum:1' 1 optelt bij elk document dat tot dezelfde groep behoort. De uitvoer hier toonde slechts twee gegroepeerde documenten met de 'order_status' die is gekoppeld aan 'In-Stock'.

Voorbeeld #5: Gebruik de $group Aggregation met de $sort Aggregation

De operator $group wordt hier gebruikt met de operator '$sort' die wordt gebruikt om de gegroepeerde documenten te sorteren. De volgende query heeft drie stappen voor de sorteerbewerking. Eerst is er de $match-fase, dan de $group-fase, en als laatste is de $sort-fase die het gegroepeerde document sorteert.

>db.Books.aggregate([

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

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

{ $sorteer:{ auteurNaam:1}}

])

Hier hebben we het overeenkomende document opgehaald waarvan de 'order_status' niet op voorraad is. Vervolgens wordt het overeenkomende document ingevoerd in de $group-fase waarin het document is gegroepeerd met het veld 'authorName' en de 'totalBooks'. De $group-expressie is gekoppeld aan de $sum-accumulator voor het totale aantal boeken die niet op voorraad zijn. De gegroepeerde documenten worden vervolgens gesorteerd met de uitdrukking $sort in oplopende volgorde, aangezien '1' hier de oplopende volgorde aangeeft. Het gesorteerde groepsdocument in de opgegeven volgorde wordt verkregen in de volgende uitvoer.

Voorbeeld # 6: Gebruik de $group Aggregation voor Distinct Value

De aggregatieprocedure groepeert de documenten ook op item met behulp van de $group-operator om de afzonderlijke itemwaarden te extraheren. Laten we de query-expressie van deze instructie in MongoDB hebben.

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

De aggregatiequery wordt toegepast op de boekencollectie om de unieke waarde van het groepsdocument te verkrijgen. De $group neemt hier de _id-expressie die de afzonderlijke waarden uitvoert zoals we het 'title'-veld erin hebben ingevoerd. De uitvoer van het groepsdocument wordt verkregen bij het uitvoeren van deze query die de groep titelnamen tegen het _id-veld heeft.

Conclusie

De gids was bedoeld om het concept van de aggregatie-operator $group te verduidelijken voor het groeperen van het document in de MongoDB-database. De geaggregeerde benadering van MongoDB verbetert de groeperingsverschijnselen. De syntaxisstructuur van de operator $group wordt gedemonstreerd met de voorbeeldprogramma's. Naast het basisvoorbeeld van de $group-operatoren, hebben we deze operator ook gebruikt met enkele accumulatoren zoals $push, $min, $sum en operators zoals $match en $sort.