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

MongoDB使用$toInt转整数报错Failed to parse number '3134-13'如何解决

问题原因及解决方案

1. 正则匹配规则写法错误

你当前的过滤规则{'$regex': "/-/"}存在语法问题:MongoDB的$regex运算符不需要用斜杠包裹表达式,加斜杠后会被识别为要匹配/-/三个字符的内容,无法筛选掉仅包含单个横杠的记录,这是你过滤失效的核心原因。

修正后的匹配规则如下:

match1={
    "$match":{"end": { '$not': { '$regex': '-' } } }
} 

match2={
    "$match":{"start":{ '$not': { '$regex': '-' } } }
}

更稳妥的写法是直接匹配全数字的合法整数字符串,避免空格、字母等其他非数字内容触发转换错误:

match1={
    "$match":{"end": { '$regex': '^\\d+$' } }
} 

match2={
    "$match":{"start":{ '$regex': '^\\d+$' } }
}

2. 使用更安全的$convert运算符避免报错

就算过滤逻辑完全正常,也可能遇到空值、非字符串类型的异常场景,推荐使用$convert替代$toInt,自定义转换失败和空值的默认返回值,从根源避免转换报错:

addFields1 = {
   '$addFields': {
      'convertedend': { 
          '$convert': {
              'input': "$end",
              'to': "int",
              'onError': None, # 可自定义转换失败时的返回值,比如0
              'onNull': None # 可自定义字段为空时的返回值
          }
      },
      'convertedstart': { 
          '$convert': {
              'input': "$start",
              'to': "int",
              'onError': None,
              'onNull': None
          }
      }
   }
}

如果不需要转换失败的记录,可以在$addFields之后新增匹配阶段,过滤掉convertedend或convertedstart为None的记录即可。

额外注意项

你当前的$group阶段存在笔误,convertedstart赋值的是$convertedend,建议修正为对应字段:

group={
    "$group":{'_id': '$_id', 'convertedend':'$convertedend','convertedstart':'$convertedstart'}
}

内容的提问来源于stack exchange,提问作者Mon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:04