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

MongoDB 5搭配Node驱动4.2无法获取详细Schema校验错误如何解决

解决方案

前置问题排查

你当前收到的TypeMismatch错误和MongoDB 5的JSON Schema校验能力无关:该错误是插入接口传参格式错误导致,报错信息明确说明insert.documents.0是数组类型,不符合要求的object类型,说明你调用插入方法时给的待插入文档外层多套了一层数组,例如错误写法为insertOne([{字段: 值}]),修正为insertOne({字段: 值})即可解决该报错。
你需要先修正传参问题,才能触发真正的JSON Schema校验失败错误,该错误对应错误码为121,CodeName为DocumentValidationFailure。

获取完整校验错误详情的配置要求

1. 服务端集合校验规则配置

创建或修改集合时,要确保校验规则配置如下:

db.createCollection("你的集合名称", {
  validator: {
    $jsonSchema: {
      // 此处填写你的JSON Schema规则
    }
  },
  // 必须设为strict,默认值为strict,若之前修改过需要改回
  validationLevel: "strict",
  // 必须设为error,默认值为error,设为warn只会打印日志不会抛出校验错误
  validationAction: "error"
})

注意必须确认服务端MongoDB版本为5.0及以上,低版本不支持返回详细校验错误的能力

2. Node.js驱动操作参数配置

使用MongoDB Node驱动执行插入、更新等写操作时,必须额外传入includeResultMetadata: true的配置项,示例:

// 插入单条文档示例
await collection.insertOne(待插入文档对象, { includeResultMetadata: true })
// 更新单条文档示例
await collection.updateOne({ _id: 目标文档ID }, { $set: 更新内容 }, { includeResultMetadata: true })

3. 错误详情获取方式

捕获到校验失败错误后,从错误对象的errInfo.details字段即可获取完整的校验失败明细,包含所有不满足的规则、对应字段路径、错误原因,示例捕获代码:

try {
  // 假设Schema要求name字段为字符串类型,此处传入数字触发校验失败
  await collection.insertOne(
    { name: 123 },
    { includeResultMetadata: true }
  )
} catch (err) {
  // JSON Schema校验失败的错误码固定为121
  if (err.code === 121) {
    // 输出完整的校验错误详情
    console.log('校验失败明细:', err.errInfo.details.schemaRulesNotSatisfied)
  } else {
    // 其他类型错误(如传参格式错误、权限错误等)按原有逻辑处理
    throw err
  }
}

内容的提问来源于stack exchange,提问作者Léo Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:36:04