【问题标题】:Mongo aggregation grouped by $sum?Mongo 聚合组按 $sum?
【发布时间】:2014-09-15 04:13:33
【问题描述】:

假设我的收藏有用户名和唯一的提交 ID。

{"name" : "a","commit_id": "078d40cc537"},
{"name" : "b","commit_id": "078d40cc538"},
{"name" : "c","commit_id": "078d40cc539"},
{"name" : "a","commit_id": "078d40cc540"},
{"name" : "c","commit_id": "078d40cc541"},
{"name" : "c","commit_id": "078d40cc542"},
{"name" : "d","commit_id": "078d40cc543"}

我想生成按提交次数分组的输出。任何帮助将不胜感激。

1 commit  = 2  #user b,d
2 commits = 1  #user a
3 commits = 1  #user c

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    当然。聚合“管道”正是如此,因为您可以将阶段“链接”或“管道”在一起。要获得您的结果,您基本上需要连续两个 $group 阶段:

    db.commits.aggregate([
        { "$group": {
            "_id": "$name",
            "commits": { "$sum": 1 }  
        }},
        { "$group": {
            "_id": "$commits",
            "users": { "$push": "$_id" },
            "howMany": { "$sum": 1 }
        }},
        { "$sort": { "_id": -1 } }
    ])
    

    所以第一个总计每个“用户”,第二个按“计数”收集它们。可选降序排列成这种形式:

    { "_id" : 3, "users" : [ "c" ], "howMany": 1 }
    { "_id" : 2, "users" : [ "a" ], "howMany": 1 }
    { "_id" : 1, "users" : [ "d", "b" ], "howMany": 2 }
    

    一个阶段可以出现多少次(在 BSON 大小限制内)没有限制,因此您不限于只有一个 $group 或其他管道阶段。

    【讨论】:

      猜你喜欢
      • 2016-11-08
      • 2018-09-22
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 2023-01-13
      相关资源
      最近更新 更多