Mongoose聚合中如何修改$cond返回结果,对$driverDebt按条件做减法
正确聚合写法
你原来的写法错误原因是在$cond的返回分支中额外嵌套了不必要的$sum,且语法符号(逗号、括号)不匹配。外层的$sum已经负责对所有文档的计算结果进行累加,你只需要在内部正确实现单文档的driverDebt计算逻辑即可,正确写法如下:
driverDebt: { $sum: { $cond: [ // 原有状态判断:已支付的订单不计入欠款 { $in: ["$status", ["driverHasPaid", "paid"]] }, 0, // 新增配送费收取判断 { $cond: [ { $eq: ["$deliveryFeeCollected", "no"] }, // 未收取配送费:扣除对应金额 { $subtract: ["$driverDebt", "$deliveryPrice"] }, // 已收取:保留原有欠款金额 "$driverDebt" ] } ] } }
可选兼容处理
如果你的字段可能存在空值/不存在的情况,可以加$ifNull做兼容,避免减法返回非预期的null:
// 把减法部分替换成如下写法,默认空值按0计算 { $subtract: [ { $ifNull: ["$driverDebt", 0] }, { $ifNull: ["$deliveryPrice", 0] } ] }
内容的提问来源于stack exchange,提问作者Lhon Rafaat Mohammed
相关产品推荐
相关产品推荐

