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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:15:03