假设我有一个如下所示的客户文档

db.collection.insertOne( {
      "customerName": "John Doe",
      "orders": [
        {
          "type": "regular",
          "items": [
            {
              "name": "itemA",
              "price": 11.1
            },
            {
              "name": "itemB",
              "price": 22.2
            }
          ]
        },
        {
          "type": "express",
          "items": [
            {
              "name": "itemC",
              "price": 33.3
            },
            {
              "name": "itemD",
              "price": 44.4
            }
          ]
        }
      ]
  })

如何计算所有订单的总价(本例中为 111)?


您可以$unwind两次(因为嵌套数组)并使用$sum如下方式进行分组:

db.collection.aggregate([
  {
    "$unwind": "$orders"
  },
  {
    "$unwind": "$orders.items"
  },
  {
    "$group": {
      "_id": "$customerName",
      "total": {
        "$sum": "$orders.items.price"
      }
    }
  }
])

示例在这里