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