Mongodb: so gruppieren und summieren sie
Sie können die folgende Syntax zum Gruppieren und Zählen in MongoDB verwenden:
db.collection.aggregate([ { $group : { _id : " $field_name1 ", count :{ $sum : " $field_name2 "}}} ])
Beachten Sie, dass Feldname1 das Feld ist, nach dem Sie gruppieren möchten, und Feldname2 das Feld, das Sie summieren möchten.
Die folgenden Beispiele zeigen, wie diese Syntax mit einem Inkassoteam mit den folgenden Dokumenten verwendet wird:
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 })
Beispiel 1: Gruppieren nach und Summe
Wir können den folgenden Code verwenden, um nach dem Feld „Position“ zu gruppieren und die Summe der Punkte für jede Position zu zählen.
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}} ])
Dies gibt die folgenden Ergebnisse zurück:
{ _id: ' Forward ', count: 48 } { _id: ' Guard ', count: 64 } { _id: ' Center ', count: 19 }
Das sagt uns:
- Spieler auf der Position „Angreifer“ haben insgesamt 48 Punkte.
- Spieler mit der Position „Guard“ haben insgesamt 64 Punkte.
- Spieler auf der Position „Mitte“ haben insgesamt 19 Punkte.
Beispiel 2: Gruppieren nach und Hinzufügen (dann Sortieren)
Mit dem folgenden Code können wir die Summe der Punkte für jede Position ermitteln und die Ergebnisse automatisch in aufsteigender Reihenfolge sortieren:
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}}, { $sort : { count : 1}} ])
Dies gibt die folgenden Ergebnisse zurück:
{ _id: ' Center ', count: 19 } { _id: ' Forward ', count: 48 } { _id: ' Guard ', count: 64 }
Die Ergebnisse werden nach Punkten in aufsteigender Reihenfolge (vom kleinsten zum größten) sortiert.
Wir können -1 im Zählargument verwenden, um die Ergebnisse in absteigender Reihenfolge zu sortieren:
db.teams.aggregate([ { $group : { _id : " $position ", count :{ $sum : " $points "}}}, { $sort : { count :-1}} ])
Dies gibt die folgenden Ergebnisse zurück:
{ _id: ' Guard ', count: 64 } { _id: ' Forward ', count: 48 } { _id: ' Center ', count: 19 }
Beachten Sie, dass die Ergebnisse nach Punkten in absteigender Reihenfolge (vom größten zum kleinsten) sortiert sind.
Hinweis : Die vollständige Dokumentation für $group finden Sie hier .
Zusätzliche Ressourcen
In den folgenden Tutorials wird erläutert, wie Sie andere gängige Vorgänge in MongoDB ausführen:
MongoDB: So zählen Sie unterschiedliche Werte in einem Feld
MongoDB: So gruppieren Sie nach mehreren Feldern
MongoDB: So gruppieren und zählen