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

mongoose ObjectId验证异常返回true 该校验函数是否足够可靠?

关于mongoose.Types.ObjectId.isValid的可靠性问题

使用以下字符串执行mongoose.Types.ObjectId.isValid()校验时,会意外返回true:

  • mohamma22144
  • mohamma22145

结论:该函数不足以作为严格的ObjectId校验依据

mongoose.Types.ObjectId.isValid()的核心逻辑仅校验传入值是否格式上可被转换为ObjectId,而非校验其是否为MongoDB标准生成的、或真实存在的ObjectId。

满足以下任意一个条件的输入,该函数都会返回true:

  1. 长度为12字节的任意字符串
  2. 长度为24位的十六进制字符串
  3. 已经是ObjectId类型的实例

你测试所用的两个字符串恰好为12位长度,因此符合格式校验规则,返回true属于该函数的正常表现。

正确的校验方案

如果需要严格校验输入是否为MongoDB标准生成的24位十六进制格式ObjectId,需要搭配正则做双重校验:

const objectIdReg = /^[0-9a-fA-F]{24}$/
function isStdObjectId(id) {
  return objectIdReg.test(id) && mongoose.Types.ObjectId.isValid(id)
}

如果需要校验该ID是否真实存在于业务库中,仅靠格式校验没有意义,必须访问数据库查询对应记录是否存在。

内容的提问来源于stack exchange,提问作者m.eslampnah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:04