MongoDB 3.6 中的新特性之一是 jsonSchema 验证器。我可以使用验证器创建一个集合,例如:
{
"validator": {
"$jsonSchema": {
"properties": {
"name": {
"bsonType": "string",
"description": "name"
},
"age": {
"bsonType": "int",
"minimum": 10,
"maximum": 30
}
},
"required": ["name", "age"],
"bsonType": "object"
}
}
}
但是,如果该集合已经存在一些文档,而这些文档不能满足验证模式呢?如何根据验证器找出所有无效文件?
您可以使用
$jsonSchema
查询运算符来查找相关文档。例如,使用
mongo
外壳:同样,您可以在
$jsonSchema
为集合添加或更新验证器之前使用查询运算符来确认预期匹配:如此处所述要指定 JSON 模式验证,请在验证器表达式中使用$jsonSchema
MongoDB
运算符。例如,以下示例使用
JSON
模式指定验证规则:或者正如我在您的代码中看到的,jsonSchema 验证。
除了 JSON Schema 验证之外,MongoDB 还支持使用查询运算符使用查询过滤器表达式进行验证,但$near、$nearSphere、$text和$where除外。
验证发生在
updates
和期间inserts
。当您向集合添加验证时,现有文档在修改之前不会进行验证检查。对于现有文件
该
validationLevel
选项确定 MongoDB 应用验证规则的操作:validationLevel
是strict
(默认值),MongoDB 将验证规则应用于所有插入和更新。validationLevel
是moderate
,MongoDB 将验证规则应用于插入和更新已经满足验证条件的现有文档。对于中等级别,不检查对不满足验证标准的现有文档的更新的有效性。例如,创建一个包含以下文档的联系人集合:
发出以下命令以将 a 添加
validator
到联系人集合:联系人集合现在有一个具有中等验证级别的验证器:
如果您尝试使用
_id
of更新文档1
,MongoDB 将应用验证规则,因为现有文档与条件匹配。相反,MongoDB 不会将验证规则应用于文档的更新_id
,2
因为它不符合验证规则。要禁用
validation entirely
,您可以设置validationLevel
为off
。接受或拒绝无效文件
该
validationAction
选项确定 MongoDB 如何处理违反验证规则的文档:validationAction
是error
(默认值),MongoDB 拒绝任何违反验证标准的插入或更新。validationAction
是warn
,MongoDB 会记录任何违规行为,但允许插入或更新继续进行。例如,
contacts2
使用以下 JSON Schema 验证器创建一个集合:使用,MongoDB 会记录任何违规行为,但允许插入或更新继续进行。
warn
validationAction
例如,以下插入操作违反了验证规则:
但是,由于
validationAction
iswarn
only,MongoDB 仅记录验证违规消息并允许操作继续:供您在此处、此处和此处进一步参考 jsonSchema 验证