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