我的数据库中有4条记录
{c: [{d:1, e:0}, {d:2, e:0}]}
{c: [{d:1, e:1}, {d:2, e:0}]}
{c: [{d:1, e:0}, {d:2, e:1}]}
{c: [{d:1, e:1}, {d:2, e:1}]}
我想只找到c
字段的数组元素d
等于1
且e
等于{{1}的文档} 同时。
如果我执行如下的查询:
0
或
db.b.find({"c.d": 1, "c:e": 0})
数据库返回3 db.b.find({$and: [{"c.d": 1}, {"c:e": 0}]})
= c.d
和1
= c.e
的结果,但不会返回同一子文档。如何根据我的标准形成请求,该标准仅返回第一和第三条记录?
答案 0 :(得分:3)
使用$elemMatch。它允许您指定在一个数组元素中匹配的值。
db.b.find({ c: {$elemMatch: { d: 1, e: 0 } } })
这将为您提供具有匹配元素的整个文档。如果只想在响应中看到匹配的数组元素,请在字段上使用投影,如:
db.b.find({ c: {$elemMatch: { d: 1, e: 0 } } },{ "c.$": 1 })
其他不匹配的数组元素将不会显示。