2011-03-28 64 views
2

此查詢結果在3個對象:的MongoDB:或運營商

db.list.find({ "Visibility": 4 }) 

這是預期。現在,當我運行此查詢我的結果是0對象:

db.list.find({ "$or" : [ { "Visibility": 4 } ] }) 

我希望在這兩種情況下相同的結果,因爲,在我的理解中,還是會如果任一條件爲真,是真實的。

所以..我在這裏錯過了一些明顯的東西嗎?

回答

2

我已經完成了與@AdaTheDev在1.6.5 mongo版本相同的測試並獲得了預期的結果。 所以我想你使用的mongodb版本1.5.3之前根本不支持$or

$或操作符允許您使用布爾值或表達式來執行查詢。 您給出$或表達式列表, 其中任何一個都可以滿足查詢。
新MongoDB中1.5.3

+1

+1根據我的回答每個評論,Mika使用v1.4.4 – AdaTheDev 2011-03-28 11:11:21

+0

@AdaTheDev:是的,我明白了。 +1也。 – 2011-03-28 11:15:04

+0

是的,那是我的問題。現在運行1.8,一切按預期運行。謝謝:) – Mika 2011-03-28 13:15:16

2

這看起來對我來說 - 這裏的快速測試表明,它確實有效。

這裏是整個測試我跑:

db.Test.insert({_id: 1, Visibility: 1}) 
db.Test.insert({_id: 2, Visibility: 4}) 
db.Test.insert({_id: 3, Visibility: 3}) 
db.Test.insert({_id: 4, Visibility: 4}) 
db.Test.find({$or : [{Visibility: 4}]}) 

果然,它返回_ids 2和4的預期。我正在使用1.8.0,您使用的是哪個版本?

+0

感謝AdaTheDev!我嘗試了你的精確測試,但仍然失敗。我運行的是Ubuntu 10.10的回購版本,它是v1.4.4。我將在一段時間內升級併發布我的結果。 – Mika 2011-03-28 10:57:02

+0

@Mika - 啊哈,那就是問題了:)看到Bugai13的答案 - 應該儘快升級你的工作 – AdaTheDev 2011-03-28 11:09:50

+0

你是對的,它沒有在1.4.4中實現。現在一切運行良好,謝謝你的幫助:) – Mika 2011-03-28 13:16:18