Mongodb: so gruppieren sie nach mehreren feldern
Sie können die folgende Syntax verwenden, um mehrere Felder zu gruppieren und eine Aggregation in MongoDB durchzuführen:
db.collection.aggregate([ { $group : { _id :{field1:" $field1 ", field2:" $field2 "}, count :{ $sum :1}}} ])
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: " Mavs ", position: " Guard ", points: 22 }) db.teams.insertOne({team: " Mavs ", position: " Forward ", points: 19 }) db.teams.insertOne({team: " Rockets ", position: " Guard ", points: 26 }) db.teams.insertOne({team: " Rockets ", position: " Forward ", points: 33 })
Beispiel 1: Nach mehreren Feldern gruppieren und aggregieren
Wir können den folgenden Code verwenden, um nach „Team“ und „Position“ zu gruppieren und das Vorkommen jeder Gruppierung zu zählen:
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, count :{ $sum :1}}} ])
Dies gibt die folgenden Ergebnisse zurück:
{ _id: { team: ' Rockets ', position: ' Forward ' }, count: 1 } { _id: { team: ' Mavs ', position: ' Guard ' }, count: 2 } { _id: { team: ' Mavs ', position: ' Forward ' }, count: 1 } { _id: { team: ' Rockets ', position: ' Guard ' }, count: 1 }
Wir könnten auch eine andere Aggregation durchführen. Wir könnten zum Beispiel nach „Team“ und „Position“ gruppieren und die Summe der „Punkte“ ermitteln, indem wir Folgendes gruppieren:
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, sumPoints :{ $sum : " $points "}}} ])
Dies gibt die folgenden Ergebnisse zurück:
{ _id: { team: ' Rockets ', position: ' Forward ' }, sumPoints: 33 } { _id: { team: ' Mavs ', position: ' Guard ' }, sumPoints: 53 } { _id: { team: ' Mavs ', position: ' Forward ' }, sumPoints: 19 } { _id: { team: ' Rockets ', position: ' Guard ' }, sumPoints: 26 }
Das sagt uns:
- Die Summe der von den „Rockets“-Spielern auf der „Forward“-Position erzielten Punkte beträgt 33 .
- Die Summe der von den „Mavs“-Spielern auf der „Guard“-Position erzielten Punkte beträgt 53 .
Und so weiter.
Beispiel 2: Nach mehreren Feldern gruppieren und aggregieren (anschließend sortieren)
Wir können den folgenden Code verwenden, um nach „Team“ und „Position“ zu gruppieren und die Summe der „Punkte“ durch Gruppierung zu ermitteln und dann die Ergebnisse nach „Punkten“ in aufsteigender Reihenfolge zu sortieren:
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, sumPoints :{ $sum : " $points "}}}, { $sort : { sumPoints :1}} ])
Dies gibt die folgenden Ergebnisse zurück:
{ _id: { team: ' Mavs ', position: ' Forward ' }, sumPoints: 19 } { _id: { team: ' Rockets ', position: ' Guard ' }, sumPoints: 26 } { _id: { team: ' Rockets ', position: ' Forward ' }, sumPoints: 33 } { _id: { team: ' Mavs ', position: ' Guard ' }, sumPoints: 53 }
Wir können -1 verwenden, um die Ergebnisse nach Punkten in absteigender Reihenfolge zu sortieren:
db.teams.aggregate([ { $group : { _id : {team: " $team ", position: " $position "}, sumPoints :{ $sum : " $points "}}}, { $sort : { sumPoints :-1}} ])
Dies gibt die folgenden Ergebnisse zurück:
{ _id: { team: ' Mavs ', position: ' Guard ' }, sumPoints: 53 } { _id: { team: ' Rockets ', position: ' Forward ' }, sumPoints: 33 } { _id: { team: ' Rockets ', position: ' Guard ' }, sumPoints: 26 } { _id: { team: ' Mavs ', position: ' Forward ' }, sumPoints: 19 }
Hinweis : Die vollständige Dokumentation für $group finden Sie hier .