MongoDB含乘除的加法运算遇除数为零报错的解决方法问询
解决MongoDB聚合查询中$divide除以零的报错问题
首先,咱们先处理核心问题:当activity.e为0时,除法运算会触发报错,这时候可以用MongoDB的$cond条件操作符来做前置判断,避免除以零的情况。另外我注意到你原查询里有个$unwind: "$_id"的阶段——_id是单个ObjectId,不是数组,这个阶段完全多余,甚至可能引发额外错误,直接删掉就好。
下面是修改后的完整聚合查询,我还修正了原查询里字段不匹配的问题(你写的message_count在数据集里是a):
User.aggregate([ { $match: { _id: ObjectId("5c35f04c4e92b8337885d9a6") } }, { $project: { "activity.score": { $add: [ { $multiply: [ "$activity.a", 1.5 ] }, { $multiply: [ "$activity.b", 1.6 ] }, { $multiply: [ "$activity.c", 1.7 ] }, { $multiply: [ // 核心:用$cond判断除数是否为0 { $cond: { if: { $eq: [ "$activity.e", 0 ] }, then: 0, // 除数为0时返回默认值,你可以根据业务改1或其他 else: { $divide: [ "$activity.d", "$activity.e" ] } } }, 1.8 ] } ] } } } ]) .then(data => { console.log(data) }) .catch(error => { console.log(error) })
关键逻辑说明
$cond操作符的作用是做分支判断:
- 先检查
activity.e是否等于0,如果是,直接返回你指定的默认值(这里用0,你可以根据实际业务需求调整,比如当d和e都为0时返回1更合理) - 如果除数不为0,就正常执行除法运算
如果需要更严谨,还可以同时判断d是否为0,避免出现0/0或者其他异常场景:
{ $cond: { if: { $or: [ { $eq: [ "$activity.e", 0 ] }, { $eq: [ "$activity.d", 0 ] } ] }, then: 0, else: { $divide: [ "$activity.d", "$activity.e" ] } } }
这样无论d或e为0,都会返回默认值,彻底避免除法相关的报错。
内容的提问来源于stack exchange,提问作者Ankit
相关产品推荐
相关产品推荐

