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
相关产品推荐
相关产品推荐

