【问题标题】:combining two $elemMatch queries with AND boolean operator in MongoDB在 MongoDB 中将两个 $elemMatch 查询与 AND 布尔运算符相结合
【发布时间】:2014-06-09 23:04:46
【问题描述】:

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

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

和:

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

其中stuff 是一个元素数组,其中设置了foobar 字段。

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

要明确一点:在这种情况下,我需要获取所有具有 stuff 的一个元素的所有元素stufffoo 设置为 2 并将 bar 设置为 "b"

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

知道如何AND他们吗?

【问题讨论】:

  • 不太确定您想要完成什么。 stuff.foo怎么可能同时等于12呢?这只有在 foo 是一个数组时才有可能。在这种情况下,这是 stackoverflow.com/questions/5366687/… 的副本
  • @mnemosyn:嗯,也许是这样。谢谢指点! :)
  • @mnemosyn:所以,也许是:{ stuff: { foo: { $all: [1, 2] } } }?但是,如果我有另一个字段,例如 bar 的内部元素 stuff 怎么办? (我会更新问题)

标签: mongodb nosql


【解决方案1】:

要清楚一点:在这种情况下,我需要获取所有元素,其中一个元素的 foo 设置为 1,bar 设置为“a”,还有一个元素的 foo 设置为 2,条设置为“b”。

我希望我明白了。不应该是这样吗

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

?

【讨论】:

  • 有什么方法可以在$elemMatch 中使用$and,而不是像这个答案中那样使用其他方式?
猜你喜欢
  • 2023-03-10
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2012-10-27
相关资源
最近更新 更多