提问者:小点点

带有数组对象值和的MongoDB聚合


我有一个收藏,数据如下:

{ "id": 1,
  "name": "abc",
  "age" : "12"
  "quizzes": [
      {
          "id": "1",
          "time": "10"
      },
      {
          "id": "2",
          "time": "20"
      }
  ]
},
{ "id": 2,
  "name": "efg",
  "age" : "20"
  "quizzes": [
      {
          "id": "3",
          "time": "11"
      },
      {
          "id": "4",
          "time": "25"
      }
  ]
},
...

我想为每个文档执行MongoDB聚合,并将其设置为totalTimes字段

这就是我想在查询之后得到的结果:

{ "id": 1,
  "name": "abc",
  "age" : "12",
  "totalTimes": "30"
  "quizzes": [
      {
          "id": "1",
          "time": "10"
      },
      {
          "id": "2",
          "time": "20"
      }
  ]
},
{ "id": 2,
  "name": "efg",
  "age" : "20",
  "totalTimes": "36"
  "quizzes": [
      {
          "id": "3",
          "time": "11"
      },
      {
          "id": "4",
          "time": "25"
      }
  ]
},
...

如何查询得到测验时间的总和?


共1个答案

匿名用户

使用$reduce非常简单

db.collection.aggregate([
  {
    $addFields: {
      totalTimes: {
        $reduce: {
          input: "$quizzes",
          initialValue: 0,
          in: {
            $sum: [
              {
                $toInt: "$$this.time"
              },
              "$$value"
            ]
          }
        }
      }
    }
  }
])

蒙哥游乐场