MongoDB聚合查询Attempt to convert NaN to integer报错求助
报错原因
该错误是聚合管道中的$toInt运算符转换字段时触发的异常,常见触发场景如下:
$quantity字段为空、取值为非合法数字格式、字段不存在$lookup未匹配到对应商品导致product为null,$product.Price取值为空- 关联的商品表中
Price字段为空、取值为非合法数字格式
$toInt默认没有错误兜底逻辑,遇到NaN、空值、非数字格式的输入时会直接中断聚合任务抛出错误。
排查步骤
- 校验主表
products数组下的quantity字段取值,筛选异常数据:
db.你的主表名.find({ user: ObjectId("替换为实际查询的userId"), "products.quantity": { $not: { $type: ["int", "double"] } } })
- 校验关联商品表的
Price字段,检查是否存在空值、非数字字符串、类型错误的异常数据 - 校验是否存在
item值无效导致$lookup没有匹配到任何商品,最终product为null的情况
解决方案
方案1:使用带兜底逻辑的转换运算符
将$toInt替换为$convert运算符,配置异常时的默认返回值,避免聚合中断,修改后的$group阶段代码如下:
{ $group: { _id: null, total: { $sum: { $multiply: [ { $convert: { input: "$quantity", to: "int", onError: 0, onNull: 0 } }, { $convert: { input: "$product.Price", to: "int", onError: 0, onNull: 0 } } ] } } } }
异常场景下会默认按0计算,不会中断整个统计任务。
方案2:提前过滤无效数据
在$group阶段之前新增$match步骤,直接排除无法参与计算的异常文档:
// 新增在$group阶段之前 { $match: { quantity: { $type: ["int", "double"] }, "product.Price": { $type: ["int", "double"] } } }
该方案会直接排除异常数据,统计结果仅包含完全合法的记录。
内容的提问来源于stack exchange,提问作者AJB
相关产品推荐
相关产品推荐

