2011-03-01 47 views
40

我如何有多个$或操作?到目前为止,我已经尝试了以下,但它默默地忽略了第二个$或。

{ 
    $or: [{a: 2}, {a: 3}], 
    $or: [{b: 5}, {b: 4}] 
} 

我认为这是因为我使用了两个相同的密钥。有没有办法解决?

回答

-2

您不能嵌套多个$或语句。除了

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

来自:

这是记录在这里查询没有太大的意义。

如果尝试查询一个是2或3和b为5或4:

{A:{$中:[2,3]},B:{ $ in:[4,5]}}

请不要试图发明新的语法。

+0

以上是我的问题的简化版本。我实际上想要做的是查询两个值之间的** a **和两个值之间的** ** b **。 – Mike 2011-03-02 00:24:04

+0

OP中的$或'可能不合法,但它们彼此相邻,不是嵌套的。 – paulmelnikow 2012-03-12 02:34:15

+1

另外:在版本2.0中更改:您可以嵌套$或操作;但是,这些表达式不如顶层一样有效优化。 – mmmdreg 2013-11-01 04:46:18

-1

$,不会做的工作,因为第2 $或不会验证,如果第一个失败。

从蒙戈手册页:

的$和运营商使用短路计算。如果第一个表达式(例如)的计算结果为false,MongoDB将不会评估其余表达式。

嵌套$或然而应该做的伎俩:

db.things.find({$或:[{$或:[{ 'A':1},{ 'B':2}] },{$或:[{'a':2},{'b':3}]}]})

-1

对于像sql这样的多个我们使用$ in并且我们不使用$ nin vc是我们的收藏名称在这里。我们发现这些字符串包含cpu或备忘录。

db.collection('vc').find({ "name" : { $in: [ /cpu/, /memo/ ] }  }