假设我有以下文件:
{
"_id": "ID1",
"A": [
{
"a": "abc",
"b": true
},
{
"a": "abc",
"b": false
},
{
"a": "def",
"b": true
}
]
}
{
"_id": "ID2",
"A": [
{
"a": "abc",
"b": false
},
{
"a": "abc",
"b": false
},
{
"a": "def",
"b": true
}
]
}
如何调整查询:
db.collection.aggregate([
{$match: {"A.a": "abc"}},
{$project: {A: 1}}
])
所以我只匹配A
中至少有一个对象的文档,其中A.a=abc AND A.b=true
?在此示例中,结果将是:
{
"_id": "ID1",
"A": [
{
"a": "abc",
"b": true
},
{
"a": "abc",
"b": false
},
{
"a": "def",
"b": true
}
]
}
您需要使用$elemMatch
db.collection.aggregate([
{ $match: { A: { $elemMatch: { a: "abc", b: true }}},
{ $project: { A: 1 }}
])
也可以使用find
查询
db.collection.find(
{ A: { $elemMatch: { a: "abc", b: true }},
{ A: 1 }
)