在MongoDB中将两个$elemMatch查询与AND布尔运算符组合
我有两个不同的mongoDB查询,它们表示两种不同的条件,例如:在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:
{ 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" } } } ]});