2011-03-28 66 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