Det fungerer ikke korrekt, fordi det samler alle dokumenterne i samlingen; du grupperer på en konstant "_id":"tempId"
, du skal blot henvise til den korrekte nøgle ved at tilføje $
som:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
som i det væsentlige er en enkelttrins pipelineversion af en aggregeret operation med et ekstra felt, der indeholder sumudtrykket før gruppepipelinen, der derefter kalder det felt som $sum
operatør i gruppen.
Ovenstående fungerer siden $sum
fra MongoDB 3.2+ er tilgængelig i både $projekt
og $group
stadier og når det bruges i $projekt
fase, $sum
returnerer summen af listen af udtryk. Udtrykket "$messages.data.value"
returnerer en liste over tal [120, 1200]
som derefter bruges som $sum
udtryk:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])