Het document waaraan gewerkt moet worden staat hieronder. Het zijn geneste objecten:een object (sleutelwaardeparen met de waarde 100) is genest binnen een object ('0') (dit wordt geschreven als een tekenreeks), en dit wordt genest in een ander object ("japanese3"). De gebruikersnaam wordt gebruikt als een zoekopdracht om het juiste document te krijgen.
{ japanese3:
{ '0':
{"japanese3a": 100, "japanese3b": 100, "japanese3c": 100}
}
}
Het doel is om de getalwaarden in het diepst geneste object op te tellen, zodat het gewenste resultaat "300" is.
Het script is:
.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
});
});