mongodb3.4 Document Validation【文档验证】
来源:互联网 发布:js表单数据的验证 编辑:程序博客网 时间:2024/06/07 03:59
环境
mongodb:3.4
该功能是从mongodb
版本 3.2开始支持的.
@author 喻涛
概述
本篇由本人翻译官方文档:
https://docs.mongodb.com/manual/core/document-validation/
Mongodb提供了在插入和更新时验证文档的功能。每个集合都是基于使用validator
选项来指定验证规则的。该验证器选项是给文档指定验证规则或表达式。
可以使用任何查询操作来指定表达式, 除了$near
,$nearSphere, $text,$where
。
使用collMod
命令和validator
选项给已经存在的集合添加文档验证。
你也可以使用db.createCollection()
和validator 选项
在创建新集合时,指定文档校验规则。如下:
db.createCollection( "contacts", { validator: { $or: [ { phone: { $type: "string" } }, { email: { $regex: /@mongodb\.com$/ } }, { status: { $in: [ "Unknown", "Incomplete" ] } } ] }} )
MongoDB也提供了validationLevel
选项,该选项决定了在对现有的文件进行更新
时,MongoDB
应用验证规则的严格程度。validationAction 选项
,其决定了MongoDB
为error
,会拒绝违反验证规则的文档. 为warn
时,记录违反规则的行为但是允许无效文档.也就是即使违反规则,更新
操作依然会执行.
行为,表现
验证是在更新
和插入
时发生的。当你给一个集合添加验证时, 早已存在的文档不会进行验证除非你对其(早已存在的文档)进行修改(即:更新操作)。
现有文档
你可以使用validationLevel 选项
控制MongoDB
如何处理现有的文档。
validationLevel
默认指 strict
,MongoDB
会给所有的插入
和更新
操作应用校验规则。把validationLevel
设置为moderate
,MongoDB
会在对现有符合验证标准的文档执行插入
和更新
时,应用验证规则。使用moderate
级别, 当更新现有的文档时,不会去检查不符合验证标准的文档的合法性。
例如:
我们有这样一个集合contacts
{ "_id": "125876", "name": "Anne", "phone": "+1 555 123 456", "city": "London", "status": "Complete"},{ "_id": "860000", "name": "Ivan", "city": "Vancouver"}
使用下面的命令给contacts
集合添加验证规则:
db.runCommand( { collMod: "contacts", validator: { $or: [ { phone: { $exists: true } }, { email: { $exists: true } } ] }, validationLevel: "moderate"} )
contacts
集合现在有个验证器和validationLevel
为moderate
级别。 如果你试图更新_id:125876
的文档, MongoDB
将应用验证规则,因为这个文档符合标准。
相反, MongoDB
不会把验证规则应用在更新_id:860000
的文档上, 因为它不符合验证规则。
注:要使验证失效, 你可以把validationLevel
设置为off
。
接受或拒绝无效文档
validationAction
选项决定MongoDB
如何处理违反验证规则的文档。
validationAction
默认是error
,MongoDB
将拒绝任何违反验证规则的插入
和更新
。
当validationAction
设置为warn
, MongoDB
记录任何违反规则的行为, 但是插入
和更新
操作依然会继续执行。
例如:
下面这个例子创建了一个名为contacts
集合和一个验证器, 该验证器指定了插入
和更新
文档应该至少匹配下面三个条件中一个条件。
1、phone
字段为string
2、email
字段匹配正则表达式
3、status
字段Unknown
和Incomplete
,两者选一。
db.createCollection( "contacts", { validator: { $or: [ { phone: { $type: "string" } }, { email: { $regex: /@mongodb\.com$/ } }, { status: { $in: [ "Unknown", "Incomplete" ] } } ] }, validationAction: "warn" })
使用上面的验证器,下面的插入操作验证规则会失败,因为validationAction
是warn
,写操作会记录失败的信息,操作依然会执行成功。
db.contacts.insert( { name: "Amanda", status: "Updated" } )
日志包括完整的集合命名空间和不符合验证规则的文档,以及操作时间。
2015-10-15T11:20:44.260-0400 W STORAGE [conn3] Document would fail validation collection: example.contacts doc: { _id: ObjectId('561fc44c067a5d85b96274e4'), name: "Amanda", status: "Updated" }
限制
你不能在admin
、local
和config
数据库中给集合指定验证器。
你不能给system.*
集合指定验证器。
绕过验证器
用户可以使用bypassDocumentValidation
选项来绕过验证器。关于支持bypassDocumentValidation
选项的命令列表,参考Document Validation
这里我也列出来:
对于已经开启访问控制的部署服务器,通俗点就是已经上线并开启访问控制的MongoDB服务器
。为了绕过文档验证,认证用户必须具有bypassDocumentValidation
的操作。内置角色dbAdmin
和restore
提供了此操作。
总结
validationLevel
:作用就是决定哪些文档符合验证规则。 validationAction
:要是有不符合规则的文档,该怎么去处理。
- mongodb3.4 Document Validation【文档验证】
- validation 验证
- validation验证
- Python 正则表达式验证Here Document(嵌入文档)
- MongoDB -- 3.2新功能Document Validation
- document文档
- 验证(Verification) & 确认(Validation)
- validation简单验证
- Validation框架验证数据
- jQuery Validation 验证控件
- Silverlight Validation验证实例教程
- Silverlight Validation验证实例教程
- Silverlight Validation验证实例教程
- jQuery validation 分布验证
- validation验证类
- cross-validation 交叉验证
- 交叉验证--Cross validation
- 验证错误信息jquery validation
- Leetcode Insert Interval
- android播放有旋转角度的视频
- Notification通知栏的基本使用
- navicat for mysql 10.0.11简体中文破解版 绿色版
- JDK动态proxy原理解析
- mongodb3.4 Document Validation【文档验证】
- Linux下的守护进程
- C++:用CreateDirectory创建文件目录
- Android 手机休眠,进程仍存在
- LevelDB初探之简单使用 2014-07-28 17:16:18 分类: 大数据 一、简介 LevelDB是google开源的一个key-value存储引擎库,从版本1.2开始就
- nginx 配置后网站图片或js 加载出来一半或者不出来刷新才可以,chrome 浏览器访问项目时加载大文件失败 ERR_CONTENT_LENGTH_MISMATCH:
- 大数据--计算引擎分类
- Java使用Apache POI导出-注意前端不要使用Ajax异步请求
- 删用户删表空间的操作还能flashback回来吗?