假如有这么一个集合
db.test_tags.insertMany([{
"_id": "1",
"tags": [
{
lang:'java'
},
{
lang:'c#'
},
{
lang:'c++'
}
]
}])
这时候我想筛选出 lang=java 的数据,我希望返回的结果为
[{
lang:'java'
}]
可以使用 $elemMatch 操作符实现上述需求:
db.test_tags.find({"tags": {$elemMatch: {lang: 'java'}}})
返回结果:
{ "_id" : "1", "tags" : [ { "lang" : "java" }, { "lang" : "c#" }, { "lang" : "c++" } ] }
如果希望返回的结果仅为符合条件的数组元素,可以使用 $project 操作符进一步筛选:
db.test_tags.aggregate([
{
$match: {"tags": {$elemMatch: {lang: 'java'}}}
},
{
$project: {
"filtered_tags": {
$filter: {
input: "$tags",
as: "tag",
cond: {$eq: ["$$tag.lang", 'java']}
}
}
}
}
])
返回结果:
{ "filtered_tags" : [ { "lang" : "java" } ] }
不知道你这个问题是否已经解决, 如果还没有解决的话: