MongoDB创建带验证器集合触发40415错误:create.bsonType为未知字段
解决MongoDB创建带验证器集合时的"BSON field 'create.bsonType' is an unknown field"错误
你遇到的这个错误核心原因是传递给createCollection的参数格式不对。MongoDB要求集合的验证规则必须嵌套在validator字段里,而你直接把验证器对象当成第二个参数传进去了,导致MongoDB把bsonType误认为是create命令的顶级未知字段,所以抛出了这个错误。
问题拆解
看你的控制器代码:
await db.createCollection('orders', orderValidator)
这里的问题在于,createCollection的第二个参数是一个配置对象,验证规则不能直接放在顶层,必须嵌套到这个配置对象的validator属性中。你直接传验证器对象,MongoDB就会把里面的bsonType当成create命令的字段,自然识别不了。
修复方案
只需要调整控制器里的代码,把验证器放到配置对象的validator字段下就行,还可以按需加上验证级别和行为的配置:
import { orderValidator } from 'db/validator' // 用正确的配置结构传递验证器 await db.createCollection('orders', { validator: orderValidator, // 可选:设置严格验证所有插入/更新操作 validationLevel: 'strict', // 可选:验证失败时直接抛出错误(默认就是error,可省略) validationAction: 'error' }) console.log('collection orders created')
你的orderValidator本身的格式是完全符合MongoDB JSON Schema规范的,不需要做任何修改,只要正确嵌套到配置对象里就可以了。
补充说明
validationLevel的可选值:strict(默认,验证所有操作)、moderate(只验证插入和修改现有文档的操作,不涉及验证字段的更新不会触发验证)validationAction的可选值:error(默认,验证失败抛错)、warn(验证失败只记录警告,允许操作继续)
这样修改后,MongoDB就能正确识别你的验证规则,不会再出现那个未知字段的错误啦。
内容的提问来源于stack exchange,提问作者glinda93
相关产品推荐
相关产品推荐

