3.2版中的新功能。
MongoDB提供了在更新和插入期间执行架构验证的功能。
验证规则基于每个集合。
要在创建新集合时指定验证规则,请db.createCollection()
与validator
选项一起使用
。
要将文档验证添加到现有集合,请使用
collMod
带有该validator
选项的command 。
MongoDB还提供以下相关选项:
validationLevel
选项,该选项确定MongoDB在更新过程中对验证规则对现有文档应用的严格程度,以及validationAction
选项,该选项确定MongoDB是应该
error
还是拒绝违反验证规则的文档或
warn
有关日志中违反但允许无效文档的文档。3.6版的新功能。
从3.6版开始,MongoDB支持JSON模式验证。要指定JSON模式验证,请$jsonSchema
在validator
表达式中使用运算符。
注意
推荐使用JSON模式进行模式验证。
例如,以下示例使用JSON模式指定验证规则:
有关更多信息,请参见$jsonSchema
。
除了使用了JSON模式验证
$jsonSchema
查询操作,MongoDB的支持与验证等查询操作符,与例外$near
,
$nearSphere
,$text
,和$where
运营商。
例如,以下示例使用查询表达式指定验证器规则:
也可以看看
验证在更新和插入期间进行。当您向集合中添加验证时,现有文档将不进行验证检查,直到进行修改。
该validationLevel
选项确定MongoDB应用验证规则的操作:
validationLevel
为strict
(默认),则MongoDB将验证规则应用于所有插入和更新。validationLevel
为moderate
,则MongoDB将验证规则应用于已满足验证条件的现有文档的插入和更新。对于该moderate
级别,不检查对不满足验证标准的现有文档的更新的有效性。例如,contacts
使用以下文档创建一个集合:
发出以下命令以将验证器添加到contacts
集合中:
该contacts
集合现在有与A验证moderate
validationLevel:
_id
中1
,MongoDB的会因为现有的文档标准匹配应用验证规则。_id
的2
,因为它不符合验证规则。要完全禁用验证,可以设置validationLevel
为
off
。
该validationAction
选项确定MongoDB如何处理违反验证规则的文档:
validationAction
是error
(默认),则MongoDB拒绝任何违反验证条件的插入或更新。validationAction
为warn
,则MongoDB会记录任何违规情况,但允许进行插入或更新。例如,contacts2
使用以下JSON模式验证器创建一个集合:
使用warn
validationAction
,MongoDB会记录所有违规情况,但允许进行插入或更新。
例如,以下插入操作违反了验证规则:
但是,由于validationAction
是warn
唯一的,因此MongoDB仅记录验证违反消息并允许操作继续进行:
用户可以使用该bypassDocumentValidation
选项绕过文档验证
。
以下命令可以使用new选项绕过每个操作的验证bypassDocumentValidation
:
applyOps
命令findAndModify
命令与
db.collection.findAndModify()
方法mapReduce
命令与
db.collection.mapReduce()
方法insert
命令update
命令$out
和$merge
用于阶段
aggregate
命令和
db.collection.aggregate()
方法对于已启用访问控制的部署,要绕过文档验证,已认证的用户必须
bypassDocumentValidation
采取措施。内置角色
dbAdmin
并restore
提供此操作。