sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur summerar man värdena i ett objekt som är ett kapslat underdokument i mongodb med node.js?

Dokumentet som ska arbetas fram finns nedan. Det är kapslade objekt:ett objekt (nyckel-värdepar med värdet 100) är kapslat inuti ett objekt ('0') (detta skrivs som en sträng), och detta är kapslat inuti ett annat objekt ("japanese3"). Användarnamnet används som en fråga för att få rätt dokument.

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

Målet är att summera siffervärdena i det djupast kapslade objektet, så det önskade resultatet är "300".

Skriptet är:

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



  1. Vad är det korrekta sättet att göra en HAVING i en MongoDB GROUP BY?

  2. Fel räkning av dokument i MongoDB shard kluster

  3. MongoDB, uppdatera samlingsfältet om det nya värdet inte är null

  4. Redis pubsub meddelandekö men med återuppringning, som i ZeroMQ