Il ne fonctionne pas correctement car il agrège tous les documents de la collection ; vous regroupez sur une constante "_id": "tempId"
, il vous suffit de référencer la bonne clé en ajoutant le $
comme :
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
qui est essentiellement une version de pipeline à une étape d'une opération d'agrégation avec un champ supplémentaire contenant l'expression de somme avant le pipeline de groupe, puis appelant ce champ en tant que $sum
opérateur dans le groupe.
Ce qui précède fonctionne depuis $sum
de MongoDB 3.2+ est disponible à la fois dans $project
et $group
étapes et lorsqu'il est utilisé dans le $project
étape, $sum
renvoie la somme de la liste d'expressions. L'expression "$messages.data.value"
renvoie une liste de nombres [120, 1200]
qui sont ensuite utilisés comme $sum
expression :
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])