与mongoid中的组相加

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)

但似乎是错的.

Nei*_*unn 8

最好在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管道对结果进行排序,在这种情况下以"降序"顺序排序.

聚合框架是在本机代码实现,并且在处理结果要快得多.

  • 如何使用已选择多个范围的Mongoid标准进行此类聚合?`MyClass.scope_1.scope_2 .... scope_n.your_aggregate`? (2认同)