MongoDB - 对分桶数据执行聚合

MongoDB - Perform aggregations on bucketed data

我有一组嵌套文档,分为属于单个业务 ID 的存储桶。

为了说明,以下表示与企业 n 的发票相关的文档。 1022个,其中10朵玫瑰,20个橙子,15个苹果:

sample_doc = {
'business_id': '32044',
'dt_op': Timestamp('2018-10-02 12:16:12'),
'transactions': [
    {'Product name': 'Rose', "Quantity": 10},
    {'Product name': 'Orange', "Quantity": 20},
    {'Product name': 'Apple', "Quantity": 15}
    ]
}

我想获得每个产品 ('Product name') 在定义的 'business_id' 范围内的总销售额('Quantity' 的总和)。

我尝试使用 Compass 来:

# Stage 1: $match
{
  business_id: "1022"
}

#Stage 2: $group
{
  _id: "$transactions.Product name",
  TotalSum: {
    $sum: "transactions.Quantity"
  }
}

但是返回了一个嵌套的文档列表,没有执行求和。

如何正确执行聚合管道以获得每个产品 ('Product name') 在定义的 'business_id' 内的销售总数('Quantity' 的总和)?

你非常接近,你所缺少的只是$group阶段之前的一个$unwind

db.collection.aggregate([
  {
    $match: {
      business_id: "1022"
    }
  },
  {
    $unwind: "$transactions"
  },
  {
    $group: {
      _id: "$transactions.Product name",
      TotalSum: {
        $sum: "$transactions.Quantity"
      }
    }
  }
])

Mongo Playground