Mongodb: groeperen op en optellen
U kunt de volgende syntaxis gebruiken om te groeperen en tellen in MongoDB:
db.collection.aggregate([ { $group : { _id : " $field_name1 ", count :{ $sum : " $field_name2 "}}} ])
Houd er rekening mee dat veldnaam1 het veld is waarop u wilt groeperen en veldnaam2 het veld is waarop u de som wilt optellen.
De volgende voorbeelden laten zien hoe u deze syntaxis kunt gebruiken met een incassoteam met de volgende documenten:
db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 }) db.teams.insertOne({team: " Spurs ", position: " Forward ", points: 22 }) db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 }) db.teams.insertOne({team: " Warriors ", position: " Forward ", points: 26 }) db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })
Voorbeeld 1: groeperen op en optellen
We kunnen de volgende code gebruiken om te groeperen op ‚positie‘-veld en de som van de punten voor elke positie te tellen.
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}} ])
Dit levert de volgende resultaten op:
{ _id: ' Forward ', count: 48 } { _id: ' Guard ', count: 64 } { _id: ' Center ', count: 19 }
Dit vertelt ons:
- Spelers in de positie ‘Aanvaller’ hebben in totaal 48 punten.
- Spelers met de positie “Bewaker” hebben in totaal 64 punten.
- Spelers op de “Midden”-positie hebben in totaal 19 punten.
Voorbeeld 2: groeperen op en toevoegen (en vervolgens sorteren)
We kunnen de volgende code gebruiken om de som van de punten voor elke positie te vinden en de resultaten automatisch in oplopende volgorde te sorteren:
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}}, { $sort : { count : 1}} ])
Dit levert de volgende resultaten op:
{ _id: ' Center ', count: 19 } { _id: ' Forward ', count: 48 } { _id: ' Guard ', count: 64 }
De resultaten worden gesorteerd op punten in oplopende volgorde (van klein naar groot).
We kunnen -1 gebruiken in het count-argument om de resultaten in aflopende volgorde te sorteren:
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}}, { $sort : { count :-1}} ])
Dit levert de volgende resultaten op:
{ _id: ' Guard ', count: 64 } { _id: ' Forward ', count: 48 } { _id: ' Center ', count: 19 }
Houd er rekening mee dat de resultaten worden gesorteerd op punten in aflopende volgorde (van groot naar klein).
Opmerking : u kunt de volledige documentatie voor $group hier vinden.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende bewerkingen in MongoDB kunt uitvoeren:
MongoDB: Hoe verschillende waarden in een veld te tellen
MongoDB: groeperen op meerdere velden
MongoDB: Groeperen op en tellen