Es funktioniert nicht richtig, weil es alle Dokumente in der Sammlung aggregiert; Sie gruppieren nach einer Konstanten "_id":"tempId"
, müssen Sie nur auf den richtigen Schlüssel verweisen, indem Sie $
hinzufügen als:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
Dies ist im Wesentlichen eine einstufige Pipeline-Version einer Aggregatoperation mit einem zusätzlichen Feld, das den Summenausdruck vor der Gruppenpipeline enthält und dieses Feld dann als $sum
Operator in der Gruppe.
Das obige funktioniert seit $sum
von MongoDB 3.2+ ist sowohl in verfügbar $projekt
und $group
Stufen und bei Verwendung im $Projekt
Stufe, $sum
gibt die Summe der Liste der Ausdrücke zurück. Der Ausdruck "$messages.data.value"
gibt eine Liste von Zahlen [120, 1200]
zurück die dann als $sum
Ausdruck:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])