如何通过MongoDB JSON Schema或PartialFilterExpression验证_id的指定正则规则
MongoDB _id字段格式验证方案
可以用JSON Schema验证实现你的需求
MongoDB的JSON Schema支持正则表达式验证,完全能给_id字段加上你需要的规则。不过要先确认你的_id是字符串类型——如果是MongoDB默认的二进制ObjectId,正则验证不适用,因为它不是文本格式。
新建集合时添加验证规则
db.createCollection("你的集合名", { validator: { $jsonSchema: { bsonType: "object", required: ["_id"], properties: { _id: { bsonType: "string", // 兼容大小写的十六进制24位,且必须同时包含数字和字母 pattern: "^(?=[a-fA-F\\d]{24}$)(\\d+[a-fA-F]|[a-fA-F]+\\d)" } } } }, validationLevel: "strict", // 严格校验所有写入操作 validationAction: "error" // 校验失败直接拒绝写入并报错 })
给已存在的集合添加验证规则
db.runCommand({ collMod: "你的集合名", validator: { $jsonSchema: { bsonType: "object", required: ["_id"], properties: { _id: { bsonType: "string", pattern: "^(?=[a-fA-F\\d]{24}$)(\\d+[a-fA-F]|[a-fA-F]+\\d)" } } } }, validationLevel: "strict", validationAction: "error" })
PartialFilterExpression不适合这个场景
PartialFilterExpression主要用来创建部分索引,或者限定更新/删除操作的文档范围,它不能作为集合级的格式验证规则来强制_id的格式,所以没法满足你的需求。
额外注意事项
- 如果你的
_id是MongoDB默认的二进制ObjectId,得先改成字符串存储,或者在写入时手动生成符合规则的字符串_id才能用正则验证。 - 原正则的
/i大小写不敏感修饰符,在MongoDB的JSON Schemapattern里要写成a-fA-F,因为MongoDB的pattern默认区分大小写,得显式包含大小写字母。
内容的提问来源于stack exchange,提问作者Aman Gupta
相关产品推荐
相关产品推荐

