$jsonSchema(JSON Schema 校验)
最后更新:2026-10-09
$jsonSchema(JSON Schema 校验)
$jsonSchema 用 JSON Schema 草案标准校验文档结构,可作为查询条件或集合校验器。`{ $jsonSchema: { required: ['name'], properties: { age: { bsonType: 'int' } } } }`。支持必填字段、类型约束、属性模式等。注意:无法走普通索引,大集合上成本较高,多用于数据质量校验。
| 分类 | 元素与求值 |
|---|---|
| MongoDB 版本 | 3.6+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $jsonSchema: { required: [ <字段名> ], properties: { <属性>: { <约束> } } } }
⚙️ 参数
| Schema对象 | 包含 required、properties、bsonType 等键的 JSON Schema 文档。 |
|---|
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $jsonSchema:name 必填且 age 必须为整数
db.users.find({
$jsonSchema: {
required: ['name'],
properties: {
age: { bsonType: 'int' }
}
}
})
运行结果:
// 返回 name 存在且 age 为 int 类型的文档(未声明 age 时也通过)
📌 注意事项
- 可用 bsonType 指定 BSON 类型(int、string、objectId 等)
- 无法使用普通索引,避免在大集合上频繁使用
- 同样语法可用于集合 validator(db.createCollection 的 validator 选项)
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$jsonSchema 能校验嵌套对象吗?
A能,properties 里嵌套 properties 即可逐层校验。
Q$jsonSchema 和 $type 有什么区别?
A$type 只查单一字段类型;$jsonSchema 校验整个文档结构,支持必填、嵌套、多字段。
Q能在集合创建时用 $jsonSchema 吗?
A能,validator: { $jsonSchema: {...} } 配合 db.createCollection 作为写入校验器。