在MongoDB中将两个$ elemMatch查询与AND布尔运算符组合在一起

时间:2014-04-24 15:01:29

标签: mongodb nosql

我有两个不同的 mongoDB 查询,代表两种不同的条件,例如:

{ stuff: { $elemMatch: { foo: 1, bar: "a" } } }

{ stuff: { $elemMatch: { foo: 2, bar: "b" } } }

其中stuff是设置了foobar字段的元素数组。

现在,我不确定如何匹配集合中同时符合上述两个条件的元素。

为了清楚起见:在这种情况下,我需要获得具有stuff的一个元素的所有元素,其中foo设置为1bar设置为"a" stuff以及将foo设置为2并将bar设置为"b"的{​​{1}}的{​​{1}}元素。{/ p>

执行{ stuff: { $elemMatch: { foo: { $in: [1, 2] }, bar: { $in: ["a", "b"] } } }是错误的,因为它对两个表达式(包括两个新表达式)的行为类似于OR

关于如何AND他们的想法?

1 个答案:

答案 0 :(得分:4)

  

只是要清楚:在这种情况下,我需要获得所有元素都包含一个元素的东西,其中foo设置为1,条形设置为“a”,还有一个元素的东西,其中foo设置为2栏设为“b”。

我希望我明白了。不应该是

db.coll.find({ $and: [ 
                  { "stuff" : { $elemMatch : { "foo" : 1, "bar" : "a" } } },   
                  { "stuff" : { $elemMatch : { "foo" : 2, "bar" : "b" } } } ]});