Mongoid或/ any_of意外行为

kso*_*sol 3 ruby-on-rails mongodb mongoid

我遇到了mongoid的问题any_of.我正在尝试找到一个字段> 0或另一个> 0的对象.我的查询是:

Model.any_of(best_friend_method.gt => 0, method.gt => 0).desc(best_friend_method, method)
Run Code Online (Sandbox Code Playgroud)

它被"翻译"在:

#<Mongoid::Criteria
  selector: {"$or"=>[{:best_friends_lc_sum=>{"$gt"=>0}, :lc_sum=>{"$gt"=>0}}]},
  options:  {:sort=>[[:best_friends_lc_sum, :desc], [:lc_sum, :desc]]},
  class:    FbAlbum,
  embedded: false>
Run Code Online (Sandbox Code Playgroud)

据我了解,这就是我想要的.但它只给我6个结果.Model.where(:best_friends_lc_sum.gt => 0).count也给我6个结果,但Model.where(:lc_sum.gt => 0).count返回我~~ 850个对象.

我希望我的查询返回这两个的联合:是一个mongoid/mongodb错误,还是我做错了什么?

仅供参考:mongoid 2.4.5,mongodb 2.0.2,rails 3.1.3

谢谢你的时间!

shi*_*ara 9

这是因为你只通过一个args而不是2个args.所以就像你没有$or用.

试试:

Model.any_of({best_friend_method.gt => 0}, {method.gt => 0}).desc(best_friend_method, method)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,标准成为:

#<Mongoid::Criteria
  selector: {"$or"=>[{:best_friends_lc_sum=>{"$gt"=>0}}, {:lc_sum=>{"$gt"=>0}}]},
  options:  {:sort=>[[:best_friends_lc_sum, :desc], [:lc_sum, :desc]]},
  class:    FbAlbum,
  embedded: false>
Run Code Online (Sandbox Code Playgroud)

有时必须使用{}以分隔不同的散列.