我如何有多個$或操作?到目前爲止,我已經嘗試了以下,但它默默地忽略了第二個$或。
{
$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