Nepracuje správně, protože shromažďuje všechny dokumenty v kolekci; seskupujete podle konstanty "_id":"tempId"
, stačí uvést správný klíč přidáním $
jako:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
což je v podstatě jednostupňová kanálová verze agregované operace se zvláštním polem, které obsahuje výraz součtu před skupinovým kanálem, poté volá toto pole jako $sum
operátor ve skupině.
Výše uvedené funguje od $sum
z MongoDB 3.2+ je k dispozici jak v $project
a $group
etapách a při použití v $projekt
fáze, $sum
vrátí součet seznamu výrazů. Výraz "$messages.data.value"
vrátí seznam čísel [120, 1200]
které se pak použijí jako $sum
výraz:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])