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

在MongoDB中将两个$elemMatch查询与AND布尔运算符组合,mongodb,nosql,Mongodb,Nosql,我有两个不同的mongoDB查询,它们表示两种不同的条件,例如: { stuff: { $elemMatch: { foo: 1, bar: "a" } } } 以及: 其中stuff是同时设置了foo和bar字段的元素数组 现在,我不确定如何匹配集合中同时满足上述两个条件的元素 需要说明的是:在这种情况下,我需要获取所有元素,其中stuff的一个元素设置为1,其中bar设置为“a”,以及stuff的一个元素,其中foo设置为2,而bar设置为“b” 执行{stuff:{$elemMatch:

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

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

其中
stuff
是同时设置了
foo
bar
字段的元素数组

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

需要说明的是:在这种情况下,我需要获取所有元素,其中
stuff
的一个元素设置为
1
,其中
bar
设置为
“a”
,以及
stuff
的一个元素,其中
foo
设置为
2
,而
bar
设置为
“b”

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

你知道如何
他们吗

需要明确的是:在本例中,我需要获取所有元素,其中一个元素的foo设置为1,bar设置为“a”,另一个元素的foo设置为2,bar设置为“b”

我希望我拿到了,不是吗

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

不太确定你想要完成什么。怎么能
stuff.foo
同时等于
1
2
?只有
foo
是数组时才可能。在这种情况下,这是@mnemosyn:hmm的副本,可能是。感谢指针!:@mnemosyn:那么,可能是:
{stuff:{foo:{$all:[1,2]}}}
?但是如果我有另一个字段,比如
stuff
元素中的
bar
?(我将更新问题)有没有任何方法可以使用
$和
内部
$elemMatch
,而不是像这个答案中那样的其他方法?
db.coll.find({ $and: [ 
                  { "stuff" : { $elemMatch : { "foo" : 1, "bar" : "a" } } },   
                  { "stuff" : { $elemMatch : { "foo" : 2, "bar" : "b" } } } ]});