No funciona correctamente porque agrega todos los documentos de la colección; está agrupando en una constante "_id": "tempId"
, solo necesita hacer referencia a la clave correcta agregando $
como:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
que, en esencia, es una versión de canalización de una sola etapa de una operación agregada con un campo adicional que contiene la expresión de suma antes de la canalización de grupo y luego llama a ese campo como $sum
operador en el grupo.
Lo anterior funciona desde $sum
de MongoDB 3.2+ está disponible tanto en $project
y $group
etapas y cuando se usa en el $project
etapa, $sum
devuelve la suma de la lista de expresiones. La expresión "$messages.data.value"
devuelve una lista de números [120, 1200]
que luego se utilizan como $sum
expresión:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])