MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment additionnez-vous les valeurs dans un objet qui est un sous-document imbriqué dans mongodb en utilisant node.js ?

Le document à travailler est ci-dessous. Il s'agit d'objets imbriqués :un objet (paires clé-valeur dont la valeur est 100) est imbriqué dans un objet ('0') (ceci est écrit sous forme de chaîne), et il est imbriqué dans un autre objet ("japanese3"). Le nom d'utilisateur est utilisé comme requête pour obtenir le bon document.

{ japanese3: 
   { '0': 
     {"japanese3a": 100,  "japanese3b": 100,  "japanese3c": 100} 
   } 
}

L'objectif est d'additionner les valeurs numériques dans l'objet le plus profondément imbriqué, de sorte que le résultat souhaité soit "300".

Le script est :

         .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
    });                            
 });