数组对象值的总和 mongodb

Sum from array object value by mongodb

我正在尝试解决一个问题。我想编写一个查询,在我的文档中找到一个文档,该文档大于数组中 A 列和 B 列的总和。我在这里写了一个例子。我是 MongoDB 的新手,我搜索了很多但找不到解决方案。那么有人可以帮我解决这个问题吗?这是我的示例文档:

文档 1:

 {
    "_id" : "1",
        "array": [
    {
        "user": "1",
        "A": 2,
        "B": 0
    },
    {
        "user": "2",
        "A": 3,
        "B": 1},
    {
        "user": "3",
        "A": 0,
        "B": 5
    }
                 ]
 }

和文件 2:
 {
    "_id" : "2",
        "array": [
    {
        "user": "4",
        "A": 1,
        "B": 1
    },
    {
        "user": "5",
        "A": 2,
        "B": 2
    }
                 ]
 }


例如,文档 1 中数组所有元素中 A 和 B 的总和为 11,文档 2 中数组元素中 A 和 B 的总和为 6。所以我想获取文档 1 进行输出,因为它是在对所有元素中的所有 A 和 B 求和后大于 2。

您可以试试这个查询:

  • 创建一个名为 total(或任何您想要的名称)和 $add 值的辅助字段。这将添加数组的 $sum。这意味着您要将 A 和 B 中的所有值加在一起。
  • 然后按辅助字段排序,取第一位最大的
  • $limit只有一个(最大的)
  • 并且$project不输出辅助字段
db.collection.aggregate([
  {
    "$addFields": {
      "total": {
        "$add": [
          {
            "$sum": "$array.A"
          },
          {
            "$sum": "$array.B"
          }
        ]
      }
    }
  },
  {
    "$sort": {
      "total": -1
    }
  },
  {
    "$limit": 1
  },
  {
    "$project": {
      "total": 0
    }
  }
])

示例here