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

MongoDB数值差值计算:PE状态总值减CO与CA状态总值之和

MongoDB 实现方案

可以通过聚合管道完成这个计算逻辑,以下提供两种可行的实现脚本:


方法一:分步转换结构计算

db.collection.aggregate([
  // 按状态分组,提取各状态的total值
  {
    $group: {
      _id: "$status",
      total: { $sum: "$total" }
    }
  },
  // 将所有分组结果合并为一个数组
  {
    $group: {
      _id: null,
      data: { $push: { k: "$_id", v: "$total" } }
    }
  },
  // 将数组转为键值对结构,方便直接调用各状态数值
  {
    $replaceRoot: {
      newRoot: { $arrayToObject: "$data" }
    }
  },
  // 执行目标计算并格式化输出
  {
    $project: {
      _id: null,
      total: { $subtract: ["$PE", { $add: ["$CO", "$CA"] }] }
    }
  }
])

脚本说明

  • 第一个$group:按status字段分组,统计每个状态对应的total(因每个状态仅一条数据,结果即原数值)。
  • 第二个$group:将所有分组结果合并为一个文档,把状态和对应total存入数组data。
  • $replaceRoot+$arrayToObject:把数组转成键值对结构,让我们可以直接用$PE、$CO这样的字段名调用对应数值。
  • 最后一个$project:按照要求计算PE - (CO + CA),同时指定_id为null,输出最终结果。

方法二:单分组直接计算(更简洁)

适用于确定CO、CA、PE三种状态都存在的场景:

db.collection.aggregate([
  {
    $group: {
      _id: null,
      peTotal: { $sum: { $cond: [{ $eq: ["$status", "PE"] }, "$total", 0] } },
      coCaTotal: { $sum: { $cond: [{ $in: ["$status", ["CO", "CA"]] }, "$total", 0] } }
    }
  },
  {
    $project: {
      _id: null,
      total: { $subtract: ["$peTotal", "$coCaTotal"] }
    }
  }
])

脚本说明

  • 单个$group阶段完成数值提取:用$cond条件判断,分别累加PE的total,以及CO和CA的total总和。
  • 后续$project直接执行减法计算,得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:10:34