MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie summieren Sie die Werte innerhalb eines Objekts, das ein verschachteltes Unterdokument in mongodb ist, mit node.js?

Das zu bearbeitende Dokument ist unten. Es handelt sich um verschachtelte Objekte:Ein Objekt (Schlüssel-Wert-Paare mit dem Wert 100) ist in einem Objekt ('0') verschachtelt (dies wird als Zeichenfolge geschrieben), und dieses ist in einem anderen Objekt ("japanese3") verschachtelt. Der Benutzername wird als Abfrage verwendet, um das richtige Dokument zu erhalten.

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

Ziel ist es, die Zahlenwerte im am tiefsten verschachtelten Objekt zu summieren, sodass das gewünschte Ergebnis "300" ist.

Das Skript lautet:

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