官方参考: https://docs.mongodb.org/master/core/document-validation/

文档验证是3.2的重要新特性,添加验证条件的情形无非两种,一是在创建集合的时候就添加验证条件。二是在已存在的集合上添加验证.下面就介绍这种情况的操作方式.

1.新建集合的时候添加验证
使用db.createCollection()函数的时候添加validator属性.
格式:
db.createCollection('tableName',{
validator:{$or:
[
{phone:{$type:"string"}},
{status:{$in:["Unknow","Incomplete"]}}
],
validationAction:"error"
}
})
显然这要求tableName集合中phone字段必须是String类型,status必须是"Unknows","Incomplete"中的其中一个.
这里其实还隐含了一个条件,就是tableName集合必须要有这两个属性中的一个.

validatioinAction属性
这个属性决定了如何处理违反验证规则的数据,有两个值error,warn
error,默认值.在插入不符合验证的文档时候,会直接报错并阻止不符合条件的文档插入.
warn,警告. 在插入不符合验证的文档时候,会在log中生产警告记录,但文档仍然可以插入成功.

2.給已存在的集合添加文档验证
使用collMod来创建,现有一个集合contact2,有数据如下:
{
"_id" : "860000",
"name" : "Ivan",
"city" : "Vancouver"
}
{
"_id" : "125876",
"name" : "Anne",
"phone" : "+1 555 123 456",
"city" : "London",
"status" : "Complete"
}
现给contact2添加文档验证,要求后续文档的内容必须满足条件:phone或者email至少有一个
db.runCommand({
collMod:"contacts2", //集合名称
validator:{$or:[{phone:{$exists:true}},{email:{$exists:true}}]},
validationLevel:"moderate"
})
validationLevel属性
这个属性决定了验证条件对已经存在的数据的执行效果.它有三个值off,strict,moderate
strict是默认值,这时mongodb对于所有insert和update都严格执行验证规则.
off 对所有的update都不执行验证规则
moderate,当更新已经存在的并没有满足验证规则的数据时,不会执行验证.

此例中如果设置validationLevel:moderate,产生的效果是创建验证后,如果你试图修改_id:125876的记录,则会触发验证规则.如果你试图修改_id:860000的记录,则可任意修改,不受验证规则的限制.
如果设置validationLevel:off. 在修改id:125876的数据时候不受到验证条件的干扰.

3.插入数据时避开验证
在插入或者更新文档的时候,可以通过bypassDocumentValidation:属性来避开验证
db.runCommand()支持这个属性
如:db.runCommand({
insert:"collectionName",
documents:[{},{}....],
writeConcern:{},
bypassDocumentValidation:
}),

db.runCommand({
update:,
upates:[
{q:,u:,upsert:,multi:},
{q:,u:,upsert:,mutil:},
.....
writeConcern:{}
bypassDocumentValidation:
]
})
但是db.collection.insert/update()方法不支持这个属性.而db.collection.mapReduce(),db.collection.aggretate()方法支持这个属性.

4.其他注意的地方
1.admin.local以及config数据库中的集合不能添加验证.
2.system.*里面的集合也不能添加验证.

5.其他相关命令
1.db.getCollectionInfos()------这个命令可以查看数据库表所有集合的验证条件
2.db.getCollectinInfos({name:"collectionName"})---查看指定表的validation信息.

最新文章

  1. JavaScript入门篇QA总结
  2. 【JAVA】调用类中的属性
  3. statusbar 样式
  4. 关于内存数据与 JSON
  5. 建立自己的git repository
  6. 精选29款非常实用的jQuery应用插件
  7. SharePoint 2013 术语和术语集介绍
  8. CSharp 调用存储过程来执行增、删、改操作
  9. ocx在我indows7无法注册
  10. XML结构文件的读写
  11. @synthesize
  12. HAProxy实战
  13. NodeJS入门简介
  14. HDU 6092 Rikka with Subset
  15. Blender 2.78 突然卡顿
  16. 最大子段和的DP算法设计及其效率测试
  17. 分享一个小设置-项目启动时服务器指向本地IIS
  18. hash的排序(转载)
  19. 要显示的联系人——>自定义-bug
  20. jquery实现返回页面顶部功能。

热门文章

  1. Android 后台应用保活、消息推送
  2. 期货大赛项目|八,ueditor的应用
  3. pc端网页,移动端网页(andorid、ios)离开页面做一个时间存储
  4. java代码获取多边形的中心点
  5. [转自大神]js拖拽小总结
  6. every循环
  7. Django实例
  8. Android系统源代码目录结构 “Android源代码”“目录结构”
  9. svn没有权限报出的错
  10. [LeetCode] N-ary Tree Preorder Traversal N叉树的前序遍历