Sab*_*osh 2 ruby ruby-on-rails mongodb mongoid aggregation-framework
我是mongoid和mongodb的新手.我有一个型号名称like_count(account_id, create_at, updated_at, like_cnt).我需要按照排序顺序计算每个帐户的总和.我尝试过类似的东西
LikeCount.group_by(&:account_id).sum(:like_cnt)
Run Code Online (Sandbox Code Playgroud)
但似乎是错的.
最好在moped语法中使用MongoDB中的聚合框架方法.其他类似.group_by遗留JavaScript引擎包装器的方法在评估结果时要慢得多:
LikeCount.collection.aggregate([
{"$group" => {
"_id" => "$account_id",
"likes" => {"$sum" => "$like_count"}
}},
{"$sort" => { "likes" => -1}}
])
Run Code Online (Sandbox Code Playgroud)
它使用$group管道阶段以按给定_id键聚合结果,并且$sort管道对结果进行排序,在这种情况下以"降序"顺序排序.
该聚合框架是在本机代码实现,并且在处理结果要快得多.