2011-03-01 46 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/ ] }  }