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

MongoDB中如何对两个集合的costPrice求和并按商品总价值排序

MongoDB跨集合产品成本统计实现方案

默认两个集合名称为coll1(对应你说的集合1)、coll2(对应你说的集合2),可根据实际集合名修改后直接运行聚合查询:

db.coll1.aggregate([
  // 打平集合1的products内嵌数组
  { $unwind: "$products" },
  // 按产品ID分组统计集合1内的总成本价
  {
    $group: {
      _id: "$products._id",
      name: { $first: "$products.name" },
      totalCollection1: { $sum: "$products.pricePolicy.costPrice" }
    }
  },
  // 合并集合2的统计结果
  {
    $unionWith: {
      coll: "coll2",
      pipeline: [
        // 打平集合2的listProduct内嵌数组
        { $unwind: "$listProduct" },
        // 按产品ID分组统计集合2内的总成本价
        {
          $group: {
            _id: "$listProduct.id",
            name: { $first: "$listProduct.name" },
            totalCollection2: { $sum: "$listProduct.costPrice" }
          }
        }
      ]
    }
  },
  // 合并同一产品在两个集合的统计值,缺省值补0
  {
    $group: {
      _id: "$_id",
      name: { $first: "$name" },
      totalCollection1: { $sum: { $ifNull: ["$totalCollection1", 0] } },
      totalCollection2: { $sum: { $ifNull: ["$totalCollection2", 0] } }
    }
  },
  // 计算单个产品的总成本价总和
  {
    $addFields: {
      total: { $add: ["$totalCollection1", "$totalCollection2"] }
    }
  },
  // 按总成本价降序排序
  { $sort: { total: -1 } }
])

查询逻辑说明:

  • $unwind用于拆解内嵌的产品数组,将每个产品转化为独立的单条记录方便统计
  • 两次分组操作分别计算两个集合中每个产品的成本价总和,分别存入对应字段避免混淆
  • $unionWith用于直接合并两个集合的统计结果,不需要分两次查询后手动拼接数据
  • 最终分组处理将同一产品在两个集合的统计值合并,没有对应统计值的字段默认补0,计算总价值后按要求排序即可得到你需要的结果格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:06:01