MongoDB聚合嵌套分组

9

我在我的收藏中只是简单地分配了人员和状态,如下所示

[
 {"ASSIGN_ID": "583f84bce58725f76b322398", "STATUS": 1},
 {"ASSIGN_ID": "583f84bce58725f76b322398","STATUS": 4},
 {"ASSIGN_ID": "583f84bce58725f76b322398","STATUS": 4},
 {"ASSIGN_ID": "583f84bce58725f76b322398","STATUS": 3},
 {"ASSIGN_ID": "583f84bce58725f76b322311","STATUS": 1},
 {"ASSIGN_ID": "583f84bce58725f76b322311","STATUS": 3},
 {"ASSIGN_ID": "583f84bce58725f76b322322","STATUS": 1},
 {"ASSIGN_ID": "583f84bce58725f76b322322","STATUS": 4}
]

我希望您能按照以下方式将此数据分组:ASSIGN_ID,并在其中按STATUS进行分组,计算每个STATUS的数量,如下所示。
[  
   {  
      "ASSIGN_ID":"583f84bce58725f76b322398",
      "STATUS_GROUP":[  
         {  
            "STATUS":1,
            "COUNT":1
         },
         {  
            "STATUS":3,
            "COUNT":1
         },
         {  
            "STATUS":4,
            "COUNT":2
         }
      ]
   },
   {  
      "ASSIGN_ID":"583f84bce58725f76b322311",
      "STATUS_GROUP":[  
         {  
            "STATUS":1,
            "COUNT":1
         },
         {  
            "STATUS":3,
            "COUNT":1
         }
      ]
   },
   {  
      "ASSIGN_ID":"583f84bce58725f76b322322",
      "STATUS_GROUP":[  
         {  
            "STATUS":1,
            "COUNT":1
         },
         {  
            "STATUS":4,
            "COUNT":1
         }
      ]
   }
]

然而,我已编写代码,仅按 状态 分组。请查看以下查询。
Inspection.aggregate([
    {$group: {
    "_id": '$STATUS',
    "count" :  { $sum : 1 }}}], function (err, result) {
}});

请帮我修复这个问题。

1个回答

29

使用此命令,它将适用于您的示例案例,希望它能解决您的问题。

db.testCollection.aggregate([{
    $group: {
        _id: {
            ASSIGN_ID: "$ASSIGN_ID",
            STATUS: "$STATUS"
        },
        count: {
            "$sum": 1
        }
    }
}, {
    $group: {
        _id: "$_id.ASSIGN_ID",
        STATUS_GROUP: {
            $push: {
                STATUS: "$_id.STATUS",
                count: "$count"
            }
        }
    }
}])

在 Shell 中输出:

{
    "_id": "583f84bce58725f76b322398",
    "STATUS_GROUP": [{
        "STATUS": 3,
        "count": 1
    }, {
        "STATUS": 4,
        "count": 2
    }, {
        "STATUS": 1,
        "count": 1
    }]
}, {
    "_id": "583f84bce58725f76b322311",
    "STATUS_GROUP": [{
        "STATUS": 3,
        "count": 1
    }, {
        "STATUS": 1,
        "count": 1
    }]
}, {
    "_id": "583f84bce58725f76b322322",
    "STATUS_GROUP": [{
        "STATUS": 1,
        "count": 1
    }, {
        "STATUS": 4,
        "count": 1
    }]
}

谢谢,它确实有效!另外假设该集合还有另一列,我该如何将该特定列添加到此结果中?希望你明白我的问题。 - Sameera Danthanarayna
有人能建议一下吗?我们是否也想在同一次迭代中获得所有状态的总计数? - Lokesh Bajracharya
谢谢你,这真的为我节省了很多研究时间。 - Otis-iDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接