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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:05:31