MongoDB-嵌套数组中的总和值

时间:2018-12-19 09:32:53

标签: mongodb mongoose mongodb-query aggregation-framework

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

  {
    “_ID” : {
        “ import_type”:“ MANUAL_UPLOAD”,
        “供应商”:“ jabino.de”,
        “ unit_price”:“ 0”
    },
    “状态”:[
        {
            “ status”:“ DUPLICATED”,
            “计数”:14
        },
        {
            “状态”:“黑名单”,
            “计数”:2
        },
        {
            “状态”:“可用”,
            “数量”:2239
        },
        {
            “状态”:“ INVALID_EMAIL_ADDRESS”,
            “计数”:1
        },
        {
            “ status”:“ DUPLICATED”,
            “计数”:14
        },
        {
            “状态”:“黑名单”,
            “计数”:2
        },
        {
            “状态”:“可用”,
            “数量”:2239
        },
        {
            “状态”:“ INVALID_EMAIL_ADDRESS”,
            “计数”:1
        }
    ]
}
 

如何汇总状态相同的 statuss 数组中的所有 count ,而又不会丢失 _id中的键值。例如。在这种情况下

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

1 个答案:

答案 0 :(得分:2)

您可以在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"
      }
    }
  }}
])