You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB使用aggregate聚合orders集合统计商品销量与销售额

MongoDB 聚合统计数组字段内商品的总销量与总销售额

假设有一个MongoDB订单集合,每个文档对应一条订单记录,包含products对象数组字段,存储订单内所有售出商品的明细。

示例集合数据

// 订单文档1
{
  id: "62aac8cfb5722d4c628a4a24",
  products: [
    {
      productId: "62aac8cfb5722d4c628a4a24",
      quantity: 1,
      total: 50,
    },
  ],
}

// 订单文档2
{
  id: "62aac8cfb5722d4c628a4a24",
  products: [
    {
      productId: "62aac8cfb5722d4c628a4a24",
      quantity: 2,
      total: 100,
    },
    {
      productId: "65fasd454daer57f2ads4c",
      quantity: 2,
      total: 100,
    },
  ],
}

// 订单文档3
{
  id: "62aac8cfb5722d4c628a4a24",
  products: [
    {
      productId: "62aac8cfb5722d4c628a4a24",
      quantity: 5,
      total: 200,
    },
  ],
}

注:示例中三个文档id字段值完全重复属于提问时的笔误,正常业务中订单主键唯一,该问题不影响聚合逻辑运行

统计需求

跨所有订单文档,按唯一productId统计对应商品的总销量(quantity字段求和)、总销售额(total字段求和),最终返回sales数组,每个数组元素对应一个商品的统计结果,预期结构如下:

{
  sales: [
    {
      productId:"62aac8cfb5722d4c628a4a24",
      quantity:8,
      total:350
    },
    {
      productId:"65fasd454daer57f2ads4c",
      quantity:2,
      total:200
    }
  ]
}

聚合实现代码

db.你的集合名称.aggregate([
  // 拆解products数组,每个商品明细生成一条独立记录
  { $unwind: "$products" },
  // 按商品ID分组,累加计算总销量、总销售额
  {
    $group: {
      _id: "$products.productId",
      quantity: { $sum: "$products.quantity" },
      total: { $sum: "$products.total" }
    }
  },
  // 调整字段结构,匹配输出要求
  {
    $project: {
      _id: 0,
      productId: "$_id",
      quantity: 1,
      total: 1
    }
  },
  // 将所有统计结果归集到sales数组下
  {
    $group: {
      _id: null,
      sales: { $push: "$$ROOT" }
    }
  },
  // 去掉多余的_id字段
  {
    $project: {
      _id: 0,
      sales: 1
    }
  }
])

逻辑说明

  • $unwind阶段负责把嵌套在数组里的商品明细拆成独立文档,解决数组字段无法直接跨文档分组统计的问题
  • 第一个$group阶段以商品ID为分组键,用$sum操作符累加所有同ID商品的销量和销售额
  • 第一个$project阶段把分组产生的_id(即商品ID)重命名为要求的productId字段,过滤多余字段
  • 后续的$group和$project阶段负责把所有商品的统计结果整理到sales数组中,匹配最终返回格式

如果不需要把结果包裹在sales字段下、直接返回商品统计数组,可以删掉最后两个聚合阶段。

内容的提问来源于stack exchange,提问作者ali talha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:21:46