MongoDB:在对象数组内的数组中聚合分组对象

Rya*_*n M 6 aggregate mongodb

我需要通过 mongodb 聚合管道内的 mallId 对投票内的对象进行分组。多年来一直在寻找答案,但我对 mongodb 不太熟悉,所以我有点迷茫。谁能帮我吗?

     [
      {
        "_id": "Specialty Retailer",
        "votes": [
          {
            "mallId": "59ddea3718a03a4e81f289f5",
            "count": 13
          },
          {
            "mallId": "59ddea3718a03a4e81f289f5",
            "count": 270
          },
          {
            "mallId": "59ddea3718a03a4e81f289f5",
            "count": 13
          },
          {
            "mallId": "59ddea3718a03a4e81f289f5",
            "count": 2
          },
          {
            "mallId": "59ddea3718a03a4e81f289f5",
            "count": 15
          },
          {
            "mallId": "59ddea3718a03a4e81f289f5",
            "count": 2
          }
     ]
   }
]
Run Code Online (Sandbox Code Playgroud)

dni*_*ess 2

给出以下文档结构

{
    "_id" : ObjectId("5a020ea06216d24dd6050a07"),
    "arr" : [ 
        {
            "_id" : "Specialty Retailer",
            "votes" : [ 
                {
                    "mallId" : "59ddea3718a03a4e81f289f5",
                    "count" : 13
                }, 
                {
                    "mallId" : "59ddea3718a03a4e81f289f5",
                    "count" : 270
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这个查询应该让你继续:

db.collection.aggregate({
    $unwind: "$arr"
}, {
    $unwind: "$arr.votes"
}, {
    $group: {
        "_id": {
            "_id": "$_id",
            "arrId": "$arr._id",
            "mallId": "$arr.votes.mallId"
        },
        "totalCount": {
            $sum: "$arr.votes.count"
        }
    }
})
Run Code Online (Sandbox Code Playgroud)