MongoDB unique index
MongoDB unique index
实战
Part1:写在最前
MongoDB的 unique index索引这里有个注意事项,主要体现在对NULL值的处理上,本文加以复现。
整体环境:
MongoDB 3.2.5
Part2:集合内容
PRIMARY> db.helei.find() { "_id" : ObjectId("58b7ea9544e98b24a5bdcef5"), "i" : 0, "username" : "user0", "age" : 8, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcef6"), "i" : 1, "username" : "user1", "age" : 9, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcef7"), "i" : 2, "username" : "user2", "age" : 82, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcef8"), "i" : 3, "username" : "user3", "age" : 48, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcef9"), "i" : 4, "username" : "user4", "age" : 27, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcefa"), "i" : 5, "username" : "user5", "age" : 53, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcefb"), "i" : 6, "username" : "user6", "age" : 42, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcefc"), "i" : 7, "username" : "user7", "age" : 56, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcefd"), "i" : 8, "username" : "user8", "age" : 5, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b7ea9544e98b24a5bdcefe"), "i" : 9, "username" : "user9", "age" : 56, "created" : "Thu Mar 02 2017 17:49:09 GMT+0800 (CST)" } { "_id" : ObjectId("58b8da80d8509e8f46fd9042"), "i" : "10", "age" : 50, "create" : ISODate("2017-03-03T02:52:48.834Z") }
这里可以看到,我在helei集合中生成了i从0到10这些数据,而i:10文档中我故意漏写username这一个键值
Part3:集合索引情况
PRIMARY> db.helei.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "helei.helei" }, { "v" : 1, "key" : { "age" : 1 }, "name" : "idx_age", "ns" : "helei.helei" }, { "v" : 1, "unique" : true, "key" : { "username" : 1 }, "name" : "uk_username", "ns" : "helei.helei", "background" : true } ]
这里可以看出在name列添加了unique index: uk_username
Part4:验证
当再有一个不包含username键值的文档被插入时,会抛出错误
PRIMARY> db.helei.insert({i:"11",age:51,create:new Date()})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: helei.helei index: uk_username dup key: { : null }"
}
})
Warning:警告
如果一个文档没有对应的键,索引会将其作为null存储。
——总结——
如果对某个键建立了唯一索引,但插入了多个缺少该索引键的文档,由于集合已经存在一个该索引键值的值为null而导致插入失败。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CentOS6.5部署KVM及实现在线迁移
CentOS6.5部署KVM及实现在线迁移 一、前言虚拟化技术已经成为未来计算机技术的一个重要的发展方向。Linux在虚拟化方面已经有了很多种解决方案:VMware、VirtualBox、Xen和KVM!现在给大家分享下本人在KVM里遇到坑及解决方法。大牛们别喷.....KVM简介KVM是一个全虚拟化的解决方案。可以在x86架构的计算机上实现虚拟化功能。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的IntelCPU和具有AMD-V功能的AMD CPU。在kvm技术中应用到2样东西:kvm+qemukvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备;qemu是模拟IO设备(网卡,磁盘),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以一般都称之为qemu-kvm关于KVM的介绍在这里我就不多说了,有兴趣的童鞋可以自己去查找下;下面我们直接进行部署阶段。 二、环境介绍本环境需要至少3台机器分别为: 1、KVM_Server_1: 192.168.30.1312、KVM_Ser...
- 下一篇
Centos 7.3下 Linux For SQL Server安装及配置介绍
Centos 7.3下Linux For SQL Server安装及配置介绍 说到SQL Server服务,我们大家都知道是Microsoft公司的数据库服务,当然说到数据库,现在主要分为三大商:1:Oracle、2:Msql Server、3:Mysql;三种数据库在当下环境受到不了不同程度的关注;比如oracle主要应用到大型的商业比较多,比如银行;SQL Server主要在常见的互联网公司使用;mysql主要应用于小型的企业或者服务商使用;当然从费用上来说,Oracle是最贵的,也是最为稳定的;SQL Server也是比较贵的,但是相比Oracle稍微低点,最后我们说到的Mysql也是做开发人员经常用到的,也是管理人员经常做测试 用到的,因为是免费的,好了废话不多说了,开始进入正题,我们今天主要介绍的是Centos 7.3下安装 Linux For SQL Server及配置介绍,2016年接近年底微软公告说要出一款在Linux下可以运行的SQL Server了,当然现在已经发布了,对于功能及稳定上,需要进行测试,今天我们首先介绍的是测试,后续我们会将Linux For SQL ...
相关文章
文章评论
共有0条评论来说两句吧...