Nie działa poprawnie, ponieważ agreguje wszystkie dokumenty w kolekcji; grupujesz się na stałym "_id":"tempId"
, wystarczy odwołać się do właściwego klucza, dodając $
jako:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
co w istocie jest jednoetapową wersją potoku operacji agregowanej z dodatkowym polem, które przechowuje wyrażenie sumy przed potoku grupy, a następnie wywołuje to pole jako $sum
operatora w grupie.
Powyższe działa od $sum
z MongoDB 3.2+ jest dostępny zarówno w $projekt
i $group
etapy i gdy są używane w $projekt
etap, $sum
zwraca sumę listy wyrażeń. Wyrażenie "$messages.data.value"
zwraca listę liczb [120, 1200]
które są następnie używane jako $sum
wyrażenie:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])