我遇到了mongoid any_of
的问题。我正在尝试找到具有一个字段>的对象。 0,或另一个>我的查询是:
Model.any_of(best_friend_method.gt => 0, method.gt => 0).desc(best_friend_method, method)
它被“翻译”在:
#<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>
据我了解,这就是我想要的。但它只给我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
谢谢你的时间!
答案 0 :(得分:9)
这是因为你只通过一个args而不是2个args。所以就像你没有使用$or
一样。
尝试:
Model.any_of({best_friend_method.gt => 0}, {method.gt => 0}).desc(best_friend_method, method)
在这种情况下,标准成为:
#<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>
有时必须使用{}
来分隔不同的哈希值。
答案 1 :(得分:0)
如果这有助于某人...在Mongoid 3中,Origin gem提供了查询的语法。这是list of methods that you can use to write your Mongoid 3 queries。在这些方法中,or
方法允许您执行$or
查询:
# Mongoid query:
Model.or(
{ name: "Martin" }, { name: "Dave" }
)
# resulting MongoDB query:
{
"$or" => [
{ "name" => "Martin" }, { "name" => "Dave" }
]
}
使用OP的原始示例,可以将其重写为:
Model.or(
{ best_friend_method.gt => 0 },
{ method.gt => 0 }
).order_by(
best_friend_method,
method
)
传递给or
方法的哈希中至少有一个必须匹配才能返回记录。