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

Como você soma os valores dentro de um objeto que é um subdocumento aninhado no mongodb usando node.js?


O documento a ser trabalhado está abaixo. São objetos aninhados:um objeto (pares de chave-valor com o valor sendo 100) é aninhado dentro de um objeto ('0') (escrito como uma string), e isso é aninhado dentro de outro objeto ("japanese3"). O nome de usuário é usado como uma consulta para obter o documento correto.
{ japanese3: 
   { '0': 
     {"japanese3a": 100,  "japanese3b": 100,  "japanese3c": 100} 
   } 
}

O objetivo é somar os valores numéricos no objeto aninhado mais profundamente, de modo que o resultado desejado seja "300".

O roteiro é:
         .aggregate([
           {$match: {username: username}}, //finds the document by username
           {$set: {"japanese_array":{$objectToArray: "$japanese3.0"}}}, // all fields have the same name now (k, v)
           {$project: {_id:0, total:{$sum: "$japanese_array2.v"}}}// sum up the "v" fields                                     
       ])
        .toArray(function(err, result){
          if (err)
            console.log("Failed");
            console.log(result); 
            res.send({ status: true, msg: result[0].total}); //result shows up as a number, in this case: 300
    });                            
 });