Mongoid奇怪的查询结果

时间:2013-06-04 12:12:56

标签: mongodb mongoid3

我在Mongoid中使用MongoDB和Rails 3并在rails console中进行查询时观察到这种奇怪的行为:

> Table.where(:field => {"$exists" => true}).count
=> 3735
> Table.where(:field => {"$exists" => true}, :field => {"$ne" => ""}).count
=> 14878 # wtf???
> Table.where(:field => {"$exists" => true}, :field => "").count
=> 0 # at least it's not negative
> Table.where(:field => {"$exists" => false}).count
=> 11143

11143 + 3735 = 14878以来,我认为where(:field => {"$exists" => true}, :field => {"$ne" => ""})还会计算:field不存在的记录(因为nil != ""?)。但是,我认为#where中列出的条件会与and结合使用,因此它应该只匹配那些:field不为空字符串并且存在的记录。

1 个答案:

答案 0 :(得分:1)

你说“但是,我相信#where中列出的条件会加上'和',”但这不正确。条件是哈希值,您在key:字段上发生冲突。 Ruby默默地使用最后一个值。

请查看文档以便在Mongoid http://mongoid.org/en/origin/docs/selection.html中进行选择,并使用#and进行正确的'和'结合。请注意,您可以#inspect您的查询并检查返回的Criteria对象。例如:

puts Table.where(:field => {"$exists" => true}, :field => {"$ne" => ""}).inspect

希望这会有所帮助。