如何通过子文档的两个字段的值查找文档?

时间:2014-03-07 09:25:50

标签: javascript mongodb mongodb-query

我的数据库中有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等于1e等于{{1}的文档} 同时。 如果我执行如下的查询:

0

db.b.find({"c.d": 1, "c:e": 0})

数据库返回3 db.b.find({$and: [{"c.d": 1}, {"c:e": 0}]}) = c.d1 = c.e的结果,但不会返回同一子文档。如何根据我的标准形成请求,该标准仅返回第一和第三条记录?

1 个答案:

答案 0 :(得分:3)

使用$elemMatch。它允许您指定在一个数组元素中匹配的值。

db.b.find({ c: {$elemMatch: { d: 1, e: 0 } } })

这将为您提供具有匹配元素的整个文档。如果只想在响应中看到匹配的数组元素,请在字段上使用投影,如:

db.b.find({ c: {$elemMatch: { d: 1, e: 0 } } },{ "c.$": 1 })

其他不匹配的数组元素将不会显示。