首页 > 解决方案 > MongoDB - 计算包含数组元素的数组中的值的总和

问题描述

我有一个聚合查询生成一个包含数组元素的数组。我如何 $sum 值并产生类似于以下内容的输出:

  { "additionalReminders": 7 }

这是数据结构的一个例子。请注意,一些数组元素是空的,应该被忽略或计为 0:

  {
    "additionalReminders": [
      [
        "1",
        "1"
      ],
      [],
      [],
      [
        "1"
      ],
      [],
      [
        "1"
      ],
      [],
      [
        "1"
      ],
      [],
      [
        "1"
      ],
      [],
      [],
      [
        "1"
      ]
    ]
  }

Mongo游乐场: https ://mongoplayground.net/p/BjSU_oYC8KG

标签: mongodbmongooseaggregation-framework

解决方案


这是您要查找的内容:

db.collection.aggregate([
  {
    "$unwind": "$additionalReminders"
  },
  {
    "$unwind": "$additionalReminders"
  },
  {
    $group: {
      _id: null,
      "additionalReminders": {
        $sum: {
          "$toInt": "$additionalReminders"
        }
      }
    }
  },
  {
    $project: {
      _id: false,
      additionalReminders: true
    }
  }
])

游乐场:https ://mongoplayground.net/p/JInbHAmc_yV

这个想法是展开你的领域几次,以获得这个输出:

...
{
    "_id": ObjectId("5a934e000102030405000000"),
    "additionalReminders": "1"
  },
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "additionalReminders": "1"
  },
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "additionalReminders": "1"
  },
...

那么这只是对$additionalReminders字段求和的简单问题,但不是在我们将其转换为 Int 之前。


推荐阅读