MongoDB3.2新特性之文档验证
官方参考: 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信息.
MongoDB3.2新特性之文档验证的更多相关文章
- Html5新特性之文档声明和头部信息
Html5推出的新内容比较多,本文我们来介绍两个重点内容,文档类型声明和头部信息. 无论是Html4.01还是XHtml1.0,所有文档的开头都会有文档声明<!DOCTYPE>标签来声明它 ...
- java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER,调用XWPFTemplate动态合并生成一个新的docx文档时报错
在使用 org.apache.poi 对office文件 根据表单内容和已上次的附件 动态合并成一个新的文档时,本地调试完全ok 但是发布倒Linux环境上就老是报这个错误java.lang.NoS ...
- 《Javascript权威指南》学习笔记之十九--HTML5 DOM新标准---处理文档元信息和管理交互能力
一.了解DOM 1.DOM是Document Object Model的缩写,即文档对象类型,是文档在内存中的表示形式,是一个应用程序接口,定义了文档的逻辑结构以及一套訪问和处理文档的方法. 2.HT ...
- 12c分区增强功能,新功能(文档ID 1568010.1)
12c Partitioning Enhancements, New Features (Doc ID 1568010.1) APPLIES TO: Oracle Database - Enterpr ...
- MongoDB3.0新特性
3月3日,MongoDB3.0终于发布了. 主要特点包括了对之前收购的WiredTiger存储引擎的支持,插件式存储引擎API,SCRAM-SHA-1认证机制,并改进了解释功能.此外,包含了自动化.备 ...
- MongoDB3.2新特性之部分索引
官方介绍:https://docs.mongodb.org/manual/core/index-partial/ mongodb3.2支持对某个集合的部分数据创建索引.如给年龄大于十八岁的数据创建索引 ...
- 【Ansible 文档】【译文】Playbooks 变量
Variables 变量 自动化的存在使得重复的做事情变得很容易,但是我们的系统不可能完全一样. 在某些系统中,你可能想要设置一些与其他系统不一样的行为和配置. 同样地,远程系统的行为和状态也可以影响 ...
- C# 6.0中你不知道的新特性
为什么写? 今天去上班的公交上,有朋友在张队(张善友)的微信群里,发了一个介绍C# 6.0新特性的视频,视频7分钟,加上本人英语实在太low,整体看下来是一脸懵逼的. 下班回到家里,打开这个视频,把视 ...
- asp.net 将word文档进行编辑并导出一个新的word
最近做项目,需要多word文档进行编辑并导出一个新的word,在最初的word编辑中留下特定的字符串用来替换,然后在本地生成一个新的word文档,并且不修改服务器中的word文档,这样才能保证服务器中 ...
随机推荐
- Javascript我学之四作用域
本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘 作用域 JavaScript的变量作用域只有两种,全局作用域和函数作用域. 函数的作用域 函数中定义的变量是私有的,仅在本函数范围内有效,称为 ...
- C++线程中的几种锁
线程之间的锁有:互斥锁.条件锁.自旋锁.读写锁.递归锁.一般而言,锁的功能越强大,性能就会越低. 1.互斥锁 互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量.也就是说是为了避免多个线程在 ...
- 基础知识-Mockjs进行数据模拟
目录 1. 目标 2. 创建模拟数据服务器 3. 安装 mockjs, 熟悉 mockjs 语法 4. 设置代理,解决 vue 项目跨域问题 5. 设置响应头,解决无法获取获取 token 和 coo ...
- BZOJ-10-1176: [Balkan2007]Mokia-CDQ第二类应用
思路 :按照操作的时间进行分治,这样转化成了 时间t ,x坐标,y坐标 经典的三维偏序. 最初时间就是递增顺序,无需排序直接进行第二维的分治,类似归并排序处理x坐标,在保证 x有序的情况下进行更新y坐 ...
- java自动化-junit框架简述
本人使用的是java的junit框架来组织的自动化测试,故我这边需要简单介绍一下junit框架 首先,建议自行百度一下junit框架,先有一个大概的了解 所谓的接口自动化测试,会对多个接口中每一个接口 ...
- vue入门1(搭建项目)
安装node.js 安装cnpm npm install -g cnpm --registry=http://registry.npm.taobao.org 安装vue-cli脚手架构建工具 npm ...
- echarts研究
1.echarts是什么? 关键字:data visualization,canvas,chart Echarts是基于轻量级的canvas类库,纯javaScript实现,MVC封装,数据驱动,一款 ...
- MongDB增删改查
增加 增加一条:db.th.insertOne({}) // 返回 _id 增加多条:db.th.insertMany([{},{},{}]) // 返回 _ids 针对Array增加操作: db.s ...
- 转 mysql Next-Key Locking
原文:http://dev.mysql.com/doc/refman/5.5/en/innodb-next-key-locking.html 14.5.2.5 Avoiding the Phantom ...
- __http原理__01__通信流程_消息格式
本文转自 菜鸟教程 一.HTTP协议(HyperText Transfer Protocol,超文本传输协议) 是因特网上应用最为广泛的一种网络传输协议, 是用于从万维网(WWW:World Wi ...