MongoDB - 嵌套数组中的总和值

Tri*_*yen 1 mongoose mongodb mongodb-query aggregation-framework

我有一个看起来像这样的对象

{
    "_id" : {
        "import_type" : "MANUAL_UPLOAD",
        "supplier" : "jabino.de",
        "unit_price" : "0"
    },
    "statuses" : [ 
        {
            "status" : "DUPLICATED",
            "count" : 14
        }, 
        {
            "status" : "BLACKLISTED",
            "count" : 2
        }, 
        {
            "status" : "USABLE",
            "count" : 2239
        }, 
        {
            "status" : "INVALID_EMAIL_ADDRESS",
            "count" : 1
        }, 
        {
            "status" : "DUPLICATED",
            "count" : 14
        }, 
        {
            "status" : "BLACKLISTED",
            "count" : 2
        }, 
        {
            "status" : "USABLE",
            "count" : 2239
        }, 
        {
            "status" : "INVALID_EMAIL_ADDRESS",
            "count" : 1
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我如何对count数组中statuses具有相同status内容的所有内容求和而不丢失_id. 例如在这种情况下

  • 重复:28
  • 列入黑名单:4
  • 可用数量:4478
  • 无效的电子邮件地址:2

Ash*_*shh 5

您可以使用下面aggregation

db.collection.aggregate([
  { "$unwind": "$statuses" },
  { "$group": {
    "_id": {
      "_id": "$_id",
      "statuses": "$statuses.status"
    },
    "count": { "$sum": "$statuses.count" }
  }},
  { "$group": {
    "_id": "$_id._id",
    "statuses": {
      "$push": {
        "status": "$_id.statuses",
        "count": "$count"
      }
    }
  }}
])
Run Code Online (Sandbox Code Playgroud)