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

MongoDB聚合查询:计算带数量权重的平均单价

MongoDB 实现带购买数量权重的平均单价计算

要实现带购买数量权重的平均单价,核心逻辑是计算总花费金额除以总购买数量,而非直接对单价取算术平均。以下是修改后的聚合代码及说明:

修改后的聚合查询代码

const res = await Log.aggregate([
  // 过滤目标用户的购买记录
  {
    $match: { user: new ObjectId('653c3906012fec5ace3e54e2'), type: 'buy' }
  },
  // 按商品分组,计算总购买数量和总花费金额
  {
    $group: {
      _id: '$item',
      totalAmount: { $sum: '$amount' },
      totalCost: { $sum: { $multiply: ['$amount', '$priceEach'] } }
    }
  },
  // 计算加权平均单价
  {
    $project: {
      _id: 1,
      totalAmount: 1,
      weightedAvgPrice: { $divide: ['$totalCost', '$totalAmount'] }
    }
  }
])

关键逻辑说明

  1. $group阶段:
    • totalAmount:累加每个商品的总购买数量,对应示例中item384的2+3=5
    • totalCost:通过$multiply计算单条记录的花费(数量×单价),再累加得到总花费,对应示例中2×70000 + 3×50000 = 290000
  2. $project阶段:
    • 用$divide将总花费除以总数量,得到加权平均单价,对应示例中290000÷5=58000,这就是符合需求的真实平均采购成本

原代码的$avg: '$priceEach'仅取所有单价的算术平均(示例中(70000+50000)/2=60000),未考虑购买数量权重,无法反映实际采购的平均成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:22:37