Het werkt niet correct omdat het alle documenten in de collectie aggregeert; je groepeert op een constante "_id": "tempId"
, je hoeft alleen maar naar de juiste sleutel te verwijzen door de $
. toe te voegen als:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
wat in wezen een eentraps pijplijnversie is van een aggregatiebewerking met een extra veld dat de somuitdrukking vóór de groepspijplijn bevat en dat veld vervolgens aanroept als de $sum
operator in de groep.
Het bovenstaande werkt sinds $sum
van MongoDB 3.2+ is beschikbaar in zowel de $project
en $group
stadia en wanneer gebruikt in de $project
stage, $sum
geeft de som van de lijst met uitdrukkingen terug. De uitdrukking "$messages.data.value"
geeft een lijst met getallen terug [120, 1200]
die vervolgens worden gebruikt als de $sum
uitdrukking:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])