【问题标题】:Mongo aggregation & distinctMongo 聚合 & 不同
【发布时间】:2014-09-16 05:48:19
【问题描述】:

假设我的收藏有用户名、存储库名称和唯一的提交 ID。

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

我想生成一个按存储库分组的输出,其中包含 # 个不同的用户和总提交。

repo:"r1" , distinct_users:"3", total_commits:"4"
repo:"r3" , distinct_users:"1", total_commits:"2"
repo:"r2" , distinct_users:"1", total_commits:"1"

我们将不胜感激。

【问题讨论】:

    标签: mongodb distinct mongodb-query aggregation-framework


    【解决方案1】:

    两个分组管道阶段。但是您可能会错过 $sum 不仅仅是添加 1 的:

    db.collection.aggregate([
        { "$group": {
            "_id": { "repo": "$repo", "name": "$name" },
            "commits": { "$sum": 1 }
        }},
        { "$group": {
            "_id": "$_id.repo",
            "distinct_users": { "$sum": 1 },
            "total_commits": { "$sum": "$commits" }
        }}
    ])
    

    【讨论】:

    • 我必须修改第二个 $group 以按 "_id": "$_id.repo" 分组以生成所需的输出。
    • @harishvc 不知道你在说什么。除了_id 下的“repo”之外,上述结果会导致您的输出。但是$project 这样做是不必要的额外工作。因此省略。
    • 使用您的逻辑,我得到以下输出 [{u'total_commits': 7, u'_id': None, u'distinct_users': 5}] 。当第二个 $group 修改为 { "$group": {"_id": "$_id.repo","distinct_users": { "$sum": 1 },"total_commits": { "$sum": "$commits" }}} 时,输出按存储库分组,有 # 个不同的用户和提交总数。
    • @harishvc 您需要学会超越其他人代码的“剪切和粘贴”,并意识到明显的“错字”在哪里。已更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2018-07-15
    • 2017-08-24
    • 2018-10-25
    相关资源
    最近更新 更多