[英]How to find documents by values of two fields of sub-document?
我的数据库中有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
等于0
的文档。 如果我执行类似这样的查询:
db.b.find({"c.d": 1, "c:e": 0})
要么
db.b.find({$and: [{"c.d": 1}, {"c:e": 0}]})
数据库返回3个结果,其中cd
= 1
和ce
= 0
,但对于同一子文档则不同。 如何根据我的标准形成请求,该条件将仅返回第一条和第三条记录?
使用$ elemMatch 。 它允许您在一个数组元素中指定匹配的值。
db.b.find({ c: {$elemMatch: { d: 1, e: 0 } } })
这样就为您提供了具有匹配元素的整个文档。 如果只想在响应中看到匹配的数组元素,请在字段上使用投影,如下所示:
db.b.find({ c: {$elemMatch: { d: 1, e: 0 } } },{ "c.$": 1 })
其他不匹配的数组元素将不会显示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.