千家信息网

MongoDB unique index

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,MongoDB unique index实战Part1:写在最前MongoDB的 unique index索引这里有个注意事项,主要体现在对NULL值的处理上,本文加以复现。整体环境:MongoDB
千家信息网最后更新 2026年11月01日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而导致插入失败。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。


索引 文档 错误 不妥 事项 内容 地方 多个 实战 情况 数据 整体 时间 有限 水平 注意事项 环境 笔者 读者 中生 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南云网互联网络科技有限公司 新华互联网科技学校 科技平台互联网 润盈互联网科技 掌上梦互联网科技 一五八零互联网科技 互联网科技大会案例 科技大学互联网专业好不好 佳云科技和互联网广告 国大互联网教育科技有限公司工作 民营互联网公司国防科技 科技赋能视角下互联网保险发展 徐州市互联网科技有限公司 浙南科技城互联网大厦招聘 上海互联网科技公司ppt 本届互联网大会上的黑科技 互联网科技融合创新 互联网科技收购价值 株洲百竞科技的互联网营销顾问 武汉亿视互联网科技有限公司 北京路客互联网科技有限公司 腾讯阿里互联网科技 互联网女皇 腾讯科技 科技互联网公司logo 互联网 科技馆 华中科技有哪些互联网大佬 2021互联网科技公司排名 科技信息时代互联网发展 广州全民伙伴互联网科技有限公司 小牛互联网科技有限公司地址
0