作業するドキュメントは以下のとおりです。これはネストされたオブジェクトです。オブジェクト(値が100のキーと値のペア)はオブジェクト( '0')内にネストされ(これは文字列として記述されます)、これは別のオブジェクト( "Japanese3")内にネストされます。ユーザー名は、適切なドキュメントを取得するためのクエリとして使用されます。
{ japanese3:
{ '0':
{"japanese3a": 100, "japanese3b": 100, "japanese3c": 100}
}
}
目的は、最も深くネストされたオブジェクトの数値を合計することです。したがって、目的の結果は「300」です。
スクリプトは次のとおりです。
.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
});
});