我必须使用以下Collection,
{
"_id": ObjectId("..."),
"modules": [
{
"name": "AAA",
"group": [
{
"name": "g1",
"ID":1
},
{
"name": "g2",
"ID":2
}
]
},
{
"name": "BBB",
"group": [
{
"name": "g3",
"ID":3
},
{
"name": "g4",
"ID":4
}
]
}
]
}
我必须使用下面的代码,
test.find({'modules.group':{"$elemMatch":{'ID':1}}},{'modules.$.group': 1}).lean().exec(function(err, results) {
});
但上面的代码返回
"_id": ObjectId("..."),
"modules": [
{
"name": "AAA",
"group": [
{
"name": "g1",
"ID":1
},
{
"name": "g2",
"ID":2
}
]
}]
但我只需要匹配值数组ID,我需要在下面的响应,
"_id": ObjectId("..."),
"modules": [
{
"name": "AAA",
"group": [
{
"name": "g1",
"ID":1
}
}]
请提供解决此元素匹配问题的解决方案...
答案 0 :(得分:0)
您可以通过aggregate
执行此操作,以下是示例代码。
test.aggregate()
.unwind('modules')
.project({
"_id": 1,
"modules": {
"$filter": {
"input": "$modules.group",
"as": "elem",
"cond": { "$eq": [ "$$elem.ID", 1 ] }
}
}
})
.exec(function(err, ret){
});