Det fungerar inte korrekt eftersom det samlar alla dokument i samlingen; du grupperar på en konstant "_id":"tempId"
, du behöver bara referera till rätt nyckel genom att lägga till $
som:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
vilket i huvudsak är en enstegspipelineversion av en aggregerad operation med ett extra fält som innehåller summauttrycket före grupppipelinen som sedan anropar det fältet som $sum
operatör i gruppen.
Ovanstående fungerar eftersom $sum
från MongoDB 3.2+ är tillgänglig i både $project
och $group
steg och när de används i $project
stadium, $sum
returnerar summan av listan med uttryck. Uttrycket "$messages.data.value"
returnerar en lista med nummer [120, 1200]
som sedan används som $summa
uttryck:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])