これはコレクション構造です
[{
"_id" : "....",
"name" : "aaaa",
"level_max_leaves" : [
{
level : "ObjectIdString 1",
max_leaves : 4,
}
]
},
{
"_id" : "....",
"name" : "bbbb",
"level_max_leaves" : [
{
level : "ObjectIdString 2",
max_leaves : 2,
}
]
}]
level_max_leaves.level
指定された入力値と一致するときに、フィルターのサブドキュメント値を見つける必要があります。
そして、これは私が試した方法です、
For example,
var empLevelId = 'ObjectIdString 1' ;
MyModel.aggregate(
{$unwind: "$level_max_leaves"},
{$match: {"$level_max_leaves.level": empLevelId } },
{$group: { "_id": "$level_max_leaves.level",
"total": { "$sum": "$level_max_leaves.max_leaves" }}},
function (err, res) {
console.log(res);
});
しかし、ここでは$match
フィルターが機能していません。正確な結果がわかりませんObjectIdString 1
name
フィールドでフィルタリングすると、正常に機能します。このような、
{$match: {"$name": "aaaa" } },
しかし、サブドキュメント レベルでは、その return 0
.
{$match: {"$level_max_leaves.level": "ObjectIdString 1"} },
私の期待した結果は、
{
"_id" : "ObjectIdString 1",
"total" : 4,
}