我如何有多个$或操作?到目前为止,我已经尝试了以下,但它默默地忽略了第二个$或。
{
$or: [{a: 2}, {a: 3}],
$or: [{b: 5}, {b: 4}]
}
我认为这是因为我使用了两个相同的密钥。有没有办法解决?
我如何有多个$或操作?到目前为止,我已经尝试了以下,但它默默地忽略了第二个$或。
{
$or: [{a: 2}, {a: 3}],
$or: [{b: 5}, {b: 4}]
}
我认为这是因为我使用了两个相同的密钥。有没有办法解决?
蒙戈2.0增加了一个$和运营商,所以你可以做这样的查询:
db.things.find({$and: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2},{'b':3}]}] })
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and
您不能嵌套多个$或语句。除了
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or
来自:
这是记录在这里查询没有太大的意义。
如果尝试查询一个是2或3和b为5或4:
{A:{$中:[2,3]},B:{ $ in:[4,5]}}
请不要试图发明新的语法。
以上是我的问题的简化版本。我实际上想要做的是查询两个值之间的** a **和两个值之间的** ** b **。 – Mike 2011-03-02 00:24:04
OP中的$或'可能不合法,但它们彼此相邻,不是嵌套的。 – paulmelnikow 2012-03-12 02:34:15
另外:在版本2.0中更改:您可以嵌套$或操作;但是,这些表达式不如顶层一样有效优化。 – mmmdreg 2013-11-01 04:46:18
$,不会做的工作,因为第2 $或不会验证,如果第一个失败。
从蒙戈手册页:
的$和运营商使用短路计算。如果第一个表达式(例如)的计算结果为false,MongoDB将不会评估其余表达式。
嵌套$或然而应该做的伎俩:
db.things.find({$或:[{$或:[{ 'A':1},{ 'B':2}] },{$或:[{'a':2},{'b':3}]}]})
对于像sql这样的多个我们使用$ in并且我们不使用$ nin vc是我们的收藏名称在这里。我们发现这些字符串包含cpu或备忘录。
db.collection('vc').find({ "name" : { $in: [ /cpu/, /memo/ ] } }
测试OK。 @Mike将其标记为正确的答案。 – panchicore 2012-04-16 16:14:46