MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Precisa somar do valor do objeto da matriz no mongodb


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" }
    } }
])