MongoDB Group按计数出现的值和输出为新字段

时间:2017-10-03 03:43:35

标签: mongodb aggregation-framework

我有 3 收藏 作业,状态,受让人

作业 字段:[ _id,状态,受让人 ]

受让人 状态 字段:[ _id,名称 ]。

可以有多种与 状态 受让人 集合相关联的作业(通过{{1}链接) } field),没有嵌套或复杂的数据。

我需要查询所有分配_id Assignees 是行 状态 是列,结合单元格是ids,最后是 总计 计数。

为了帮助您想象,我附在图片下方。我是复杂的Mongo DB Aggregate框架的新手,请指导我实现查询。

  

注意状态受让人集合中的数据将是动态的。查询中没有预先确定。因此,行和列将来会动态增长,如果查询是分页,那么它将会有很大的帮助。我无法使用countstatus等硬编码'pending'名称撰写查询。随着数据的增长,现有数据可能会发生变化,如'completed''pending task'

enter image description here

以下是我的查询

'completed work'

以下是输出格式:

    db.getCollection('Assignments').aggregate([
    { 
        "$group": {
            "_id": {
                "assignee": "$assignee",
                "statusId": "$statusId"
            },
            "statusCount": { "$sum": 1 }
        }
    },
    { 
        "$group": {
            "_id": "$_id.assignee",
            "statuses": { 
                "$push": { 
                    "statusId": "$_id.statusId",
                    "count": "$statusCount"
                },
            },
            "count": { "$sum": "$statusCount" }
        }
    },
    ]);

预期输出为:

    {
    "_id" : "John",
    "statuses" : {
        "statusId" : "Pending",
        "count" : 3.0
    },
    "count" : 3.0
}
{
    "_id" : "Katrina",
    "statuses" : [{
        "statusId" : "Pending",
        "count" : 1.0
    },
    {
        "statusId" : "Completed",
        "count" : 1.0
    },
    {
        "statusId" : "Assigned",
        "count" : 1.0
    }],
    "count" : 3.0
}
{
    "_id" : "Collins",
    "statuses" : {
        "statusId" : "Pending",
        "count" : 4.0
    },
    "count" : 4.0
}

关于如何将多个{ "_id" : "Katrina", "Pending" : 1.0, "Completed" : 1.0, "Assigned" : 1.0, "totalCount" : 3.0 } 用于不同statusId作为键而不是单个文档中的值的任何想法。

1 个答案:

答案 0 :(得分:0)

3days 23mins 30sec后需要另一个@foreach($submits as $submit) {{ $submit->pivot->created_at }} // to get the created_at {{ $submit->pivot->updated_at }} // to get the updated_at @endforeach 阶段,根据statusId字符串值计算状态数:

$group

最终聚合命令:

$unwind