此查询产生3个对象:
db.list.find({ "Visibility": 4 })
这是预期的。现在,当我运行此查询时,我的结果是0个对象:
db.list.find({ "$or" : [ { "Visibility": 4 } ] } )
在两种情况下我都期望得到相同的结果,因为根据我的理解,如果任何一个条件为真,则OR将成立。
所以..我错过了一些明显的东西吗?
答案 0 :(得分: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,您使用的是哪个版本?
答案 1 :(得分:2)
我在1.6.5
mongo版本中完成了与@AdaTheDev相同的测试并得到了预期的结果。
所以我想你在1.5.3
之前使用的mongodb版本根本不支持$or
。
$或运算符允许您使用布尔值或表达式来执行查询。 你给$或表达式列表, 任何一个都可以满足查询 MongoDB 1.5.3中的新功能