Não está funcionando corretamente porque está agregando todos os documentos da coleção; você está agrupando em uma constante
"_id":"tempId"
, você só precisa referenciar a chave correta adicionando o $
Como:db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
que, em essência, é uma versão de pipeline de estágio único de uma operação agregada com um campo extra que contém a expressão de soma antes do pipeline de grupo, chamando esse campo como
$sum
operador do grupo. O acima funciona desde
$sum
do MongoDB 3.2+ está disponível em $projeto
e $group
etapas e quando usado no $projeto
estágio, $sum
retorna a soma da lista de expressões. A expressão "$messages.data.value"
retorna uma lista de números [120, 1200]
que são então usados como o $sum
expressão:db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])