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

MongoDB聚合管道percentCompletion字段仍出现空值问题排查

解决MongoDB聚合管道中percentCompletion字段因空值返回null的问题

问题根源

MongoDB的$add操作符存在特性:只要参与运算的操作数中有一个是null,整个加法运算的结果就会返回null,这直接导致后续除法、乘法运算最终得到null。

解决方案

对每个可能为空的字段(PROCUREMENT、SERVICEORDER、MATERIALTRANSFER),使用$ifNull操作符将null替换为0,再执行加法运算。除数部分的逻辑可保留原实现。

修改后的完整代码

{
  "percentCompletion": {
    $multiply: [
      {
        $divide: [
          {
            $add: [
              { $ifNull: ["$PROCUREMENT", 0] },
              { $ifNull: ["$SERVICEORDER", 0] },
              { $ifNull: ["$MATERIALTRANSFER", 0] },
              0
            ]
          },
          {
            $cond: {
              if: { $or: [{ $eq: ["$MATERIAL", null] }, { $eq: ["$MATERIAL", 0] }] },
              then: 1,
              else: "$MATERIAL"
            }
          }
        ]
      },
      100
    ]
  }
}

效果验证

针对你提供的示例数据:

  • PROCUREMENT为0,SERVICEORDER和MATERIALTRANSFER为null,经过$ifNull转换后,加法运算结果为0+0+0+0=0
  • 除数为4500.0,最终计算(0/4500)*100=0,percentCompletion字段会返回0而非null,完全符合预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:26:17