MongoDB 唯一索引
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
MongoDB支持的索引种类很多,诸如单键索引,复合索引,多键索引,TTL索引,文本索引,空间地理索引等。同时索引的属性可以具有唯一性,即唯一索引。唯一索引用于确保索引字段不存储重复的值,即强制索引字段的唯一性。缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法。
一、创建唯一索引语法
//语法 db.collection.createIndex( <key and index type specification>, { unique: true } ) 语法更多描述可参考:http://blog.csdn.net/leshami/article/details/53541978
- 1
- 2
- 3
- 4
二、演示创建唯一索引
1、演示环境
> db.version() 3.2.10 演示集合数据,可以参考:http://blog.csdn.net/leshami/article/details/52672310 > db.persons.find().limit(1).pretty() { "_id" : ObjectId("5812cbaaa129eed14b46458d"), "name" : "robinson.cheng", "age" : 25, "email" : "robinson.cheng@qq.com", "score" : { "c" : 89, "m" : 96, "e" : 87 }, "country" : "USA", "books" : [ "JS", "C++", "EXTJS", "MONGODB" ] }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
2、单个键(列)上的唯一索引
> db.persons.createIndex({name:1},{unique:true}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } > db.persons.getIndexes() [ { "v" : 1, "unique" : true, //此处表示这个索引为唯一索引 "key" : { "name" : 1 }, "name" : "name_1", "ns" : "test.persons" } ]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
3、基于复合键(列)的唯一索引
> db.persons.createIndex({name:1,email:1},{unique:true}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 } > db.persons.getIndexes() [ { "v" : 1, "unique" : true, //此处表示这个索引为唯一索引 "key" : { "name" : 1, //这个是索引对应的键,包括name和email "email" : 1 }, "name" : "name_1_email_1", "ns" : "test.persons" } ]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
4、创建唯一索引的一些限制
对于那些已经存在非唯一的列,在其上面创建唯一索引将失败 不能够基于一个哈希索引指定唯一性 Unique Constraint Across Separate Documents 唯一的约束适用于集合中的单独的文档。也就是说,唯一的索引可以防止不同的文档具有相同的索引键值, 但索引并不能阻止在基于数组或者内嵌文档创建的唯一索引上具有多个相同的值。 在一个具有重复值的单个文档的情况下,重复的值仅插入到该索引一次。 假定存在以下集合 > db.collection.insert( { a: [ { b: 4 }, { b: 4 } ] } ) WriteResult({ "nInserted" : 1 }) > db.collection.find() { "_id" : ObjectId("58199898ae431a4615ec75ac"), "a" : [ { "b" : 4 }, { "b" : 4 } ] } 在集合上a.b上创建一个唯一索引 > db.collection.createIndex( { "a.b": 1 }, { unique: true } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } 如果集合中没有文档上存在a.b为5的值,则唯一索引允许以下文档插入集合 > db.collection.insert( { a: [ { b: 5 }, { b: 5 } ] } ) WriteResult({ "nInserted" : 1 }) > db.collection.insert( { a: [ { b: 5 }, { b: 5 } ] } ) //再次插入则提示错误 WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "E11000 duplicate key error collection: test.collection index: a.b_1 dup key: { : 5.0 }" } }) > db.collection.insert( { a: [ { b: 5 }] } ) //再次插入则提示错误,即使是该文档仅有一个相同的数组元素 WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "E11000 duplicate key error collection: test.collection index: a.b_1 dup key: { : 5.0 }" } }) > db.collection.insert( { a: [ { b: 6 }] } ) WriteResult({ "nInserted" : 1 }) Unique Index and Missing Field 如果一个文档在一个唯一索引中没有索引字段的值,则该索引将为该文档存储一个空值。 由于唯一约束限制,MongoDB只会允许一个文档缺少索引字段。 对多于一个以上的文档没有索引字段的值或缺少索引字段,索引构建将失败,提示重复键错误。 假定存在如下集合 > db.mycol.insert({x:1}) WriteResult({ "nInserted" : 1 }) //为集合添加唯一索引 > db.mycol.createIndex( { "x": 1 }, { unique: true } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } //再次插入x:1,如下,我们收到了错误提示 > db.mycol.insert({x:1}) WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "E11000 duplicate key error collection: test.mycol index: x_1 dup key: { : 1.0 }" } }) //向集合插入文档x:2,y:2 > db.mycol.insert({x:2,y:2}) WriteResult({ "nInserted" : 1 }) //插入一个缺少x键的新文档,如下,可以成功插入 > db.mycol.insert({y:2}) WriteResult({ "nInserted" : 1 }) //再次插入一个缺少x键的新文档,提示重复 > db.mycol.insert({z:1}) WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "E11000 duplicate key error collection: test.mycol index: x_1 dup key: { : null }" } })
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
三、更多参考
MongoDB 单键(列)索引
MongoDB 复合索引
MongoDB 多键索引
MongoDB执行计划获取(db.collection.explain())
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
MongoDB 唯一索引相关推荐
- access建立两个字段唯一索引_关于MongoDB唯一索引(Unique)的那些事
写在前面 关于什么是索引以及唯一索引这里就不做说明了,不清楚的可以自行谷歌或者百度.是什么引起我写这篇文章呢,这来自于之前项目中的一个问题. 我们用的是MongoDB数据存储用户信息,用户表中曾经用户 ...
- mongo 唯一约束索引_快速掌握mongoDB(三)——mongoDB的索引详解
1 mongoDB索引的管理 本节介绍mongoDB中的索引,熟悉mysql/sqlserver等关系型数据库的小伙伴应该都知道索引对优化数据查询的重要性.我们先简单了解一下索引:索引的本质就是一个排 ...
- MongoDb 大数据查询优化、 MongoDB 索引、复合索引、唯一索引、 explain 分 析查询速度
一.索引基础 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快. MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧. 下面是 ...
- mongodb 建立唯一索引,去除重复数据
如果建立唯一索引的时候,有数据重复,则会报错,所以可以通过以下方法间接解决: 1.将数据导出json格式 ./mongoexport -d liuniu -c tWechatMessage -o tW ...
- 4.非关系型数据库(Nosql)之mongodb:普通索引,唯一索引
一:普通索引 1创建一个新的数据库 > use toto; switched to db toto > show dbs; admin (empty) local 0.078GB & ...
- mongodb创建唯一索引
粗略的记录一下: 以下是给scheduleTaskName和isActive两个字段加唯一索引 db.scheduleTask.createIndex({scheduleTaskName: 1, is ...
- Mongodb的索引操作
Mongodb的索引操作 1. 为什么mongdb需要创建索引 加快查询速度 进行数据的去重 2. mongodb创建简单的索引方法 语法:db.集合名.ensureIndex({属性:1}),1表示 ...
- MongoDB数据库索引基础知识与实战技巧
本文内容源自Kyle Banker 的MongoDB In Action一书.主要描述了MongoDB索引相关的一些基础知识和使用技巧. 索引类型 虽然MongoDB的索引在存储结构上都是一样的,但是 ...
- Mongodb的索引
1. 简单介绍 索引是为了加速查询. 假设没有索引,mongodb在查询时会做表扫描,假设集合非常大时,这个查询会非常慢. 一般对创建查询时的键都建立索引. 为排序字段建立索引,假设对未建立索引的字段 ...
- 五、MongoDB的索引
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没 ...
最新文章
- 删除结果集中字段重复的方法
- 大学慕课数据结构单元测试——华中科技大学
- 相机内参_相机标定(张正友标定算法)解读与实战一
- 在自己的电脑上搭建服务器(可供对外访问)
- created写法_vue.js中created方法作用
- 深度学习——loss函数的学习笔记(legacy)
- 微软ASP.NET站点部署指南(11):部署SQL Server数据库更新
- mysql基本概念之关系_Mysql数据库学习(一):数据库基本概念、关系型数据库、Mysql数_MySQL...
- C语言从入门到放弃2022年8月3号
- 博微三维技术篇【七】——生态数据兼容
- 学习笔记20--自动驾驶测试体系
- 五种百度云盘下载速度慢解决方法
- 决策树的算法流程图(ID3/C4.5/CART)
- 千个Excel文件合并为一个文件
- Android端FMODSoundTouch音频变声解决方案
- FORTIFY_SOURCE详解
- P1598 垂直柱状图
- 各大搜索引擎登陆入口
- 《来自Percal25号行星的哥顿人》
- CNN中为什么普遍使用小卷积核