【问题标题】:sum with group in mongoid在 mongoid 中与组求和
【发布时间】:2014-07-14 11:49:34
【问题描述】:

我是 mongoid 和 mongodb 的新手。 我有一个型号名称like_count(account_id, create_at, updated_at, like_cnt)。 我需要按排序顺序计算每个帐户的总和。 我尝试过类似的东西

LikeCount.group_by(&:account_id).sum(:like_cnt)

但是好像错了。

【问题讨论】:

    标签: ruby-on-rails ruby mongodb mongoid aggregation-framework


    【解决方案1】:

    您最好在 moped 语法中使用 MongoDB 中的 aggregation framework 方法。 .group_by 等其他方法是遗留的 JavaScript 引擎包装器,在评估结果时要慢得多:

    LikeCount.collection.aggregate([
        {"$group" => {
            "_id" => "$account_id",
            "likes" => {"$sum" => "$like_count"}
        }},
        {"$sort" => { "likes" => -1}}
    ])
    

    这使用$group 管道阶段以通过给定的_id 键聚合结果,$sort 管道对结果进行排序,在这种情况下按“降序”顺序。

    aggregation framework 以本机代码实现,处理结果的速度要快得多。

    【讨论】:

    • 如何使用已经选择了多个范围的 Mongoid 标准进行这样的聚合? MyClass.scope_1.scope_2....scope_n.your_aggregate ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多