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

MongoDB:字符串类型year字段$gte/$lte查询错误解决

解决MongoDB $expr查询字符串year范围的错误问题

错误原因

Location15983错误的核心原因是:$expr内部必须是单个表达式对象,不能直接并列多个条件(比如同时写$gte和$lte在同一个层级)。

解决办法

因为year是字符串类型,有两种可靠的查询方式:

方式1:将字符串year转为数值后匹配范围

利用$toInt将字符串类型的year转为整数,再用$and嵌套$gte和$lte条件(所有条件需放在$expr的单个表达式里):

db.collection.find({
  $expr: {
    $and: [
      { $gte: [ { $toInt: "$year" }, 2022 ] },
      { $lte: [ { $toInt: "$year" }, 2025 ] }
    ]
  }
})

方式2:利用字符串字典序匹配范围(仅适用于固定四位数字字符串)

如果year字段始终是四位数字格式的字符串(如"2022"、"2023"),可直接用字符串范围匹配,无需$expr,写法更简洁:

db.collection.find({
  year: {
    $gte: "2022",
    $lte: "2025"
  }
})

原理是四位数字字符串的字典排序与数值排序结果一致,能正确匹配范围。

注意事项

  • 若year字符串存在非标准格式(如带前缀、位数不足四位),必须使用方式1转数值后匹配,否则会出现错误结果。
  • 使用$expr时,所有条件必须包裹在单个顶级表达式(如$and、$or)内部,不能直接并列多个条件键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:45:31