【问题标题】:Mongodb Aggregate Nested GroupMongodb聚合嵌套组
【发布时间】:2017-07-16 08:03:51
【问题描述】:

我已经在我的收藏中分配了人员、状态,如下所示

[
 {"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 对这些数据进行分组,并在其中按每个 STATUSSTATUS 计数进行分组,如下所示。

[  
   {  
      "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
         }
      ]
   }
]

但是,我编写了代码,它只按 STATUS 分组。请在下面找到查询。

Inspection.aggregate([
    {$group: {
    "_id": '$STATUS',
    "count" :  { $sum : 1 }}}], function (err, result) {
}});

请帮我解决这个问题。

【问题讨论】:

    标签: javascript node.js mongodb mongoose aggregation-framework


    【解决方案1】:

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

    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
        }]
    }
    

    【讨论】:

    • 谢谢,它确实有效!还假设集合有另一列。我如何将该特定列添加到此结果中。希望你有我的问题
    • 有人可以建议我如何我们也想要同一迭代中所有状态的总数?
    • 谢谢你,这真的为我节省了很多研究时间。
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2021-04-19
    • 2021-03-13
    • 2021-06-27
    相关资源
    最近更新 更多