MongoDB——索引属性之唯一索引(Unique Indexes)

x33g5p2x  于2022-05-05 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(504)

一、MongoDB官网地址

二、唯一索引(Unique Indexes)的概述

  • 在现实场景中,唯一性是很常见的一种索引约束需求,重复的数据记录会带来许多处理上的麻烦,比如订单的编号、用户的登录名等。通过建立唯一性索引,可以保证集合中文档的指定字段拥有唯一值。
  • 唯一性索引对于文档中缺失的字段,会使用null值代替,因此不允许存在多个文档缺失索引字段的情况。
  • 对于分片的集合,唯一性约束必须匹配分片规则。换句话说,为了保证全局的唯一性,分片键必须作为唯一性索引的前缀字段。

三、唯一索引(Unique Indexes)的示例

3.1、示例1:没有创建唯一索引,执行2次相同数据的新增操作

  • 在values集合中新增文档数据
db.values.insert({name:"张三"})

  • 再次在values集合中新增相同的文档数据
db.values.insert({name:"张三"})

  • 因为没有创建唯一索引,因此2次新增操作成功。
db.getCollection('values').find({})

3.2、示例2:创建唯一索引,执行2次相同数据的新增操作

  • 先删除values集合
db.values.drop()

  • 在values集合中新增文档数据
db.values.insert({name:"张三"})

  • 在values集合中创建唯一索引
db.values.createIndex({name:1},{unique:true})

  • 再次在values集合中新增相同的文档数据,由结果可知,报错:不能重复插入数据
db.values.insert({name:"张三"})

3.3、示例3:复合索引支持唯一性约束

  • 先删除values集合
db.values.drop()

  • 在values集合中新增文档数据如下:
db.values.insert({title:"java",type:"技术"})

  • 在values集合中创建复合索引支持唯一性约束
db.values.createIndex({title:1,type:1},{unique:true})

  • 再次在values集合中新增相同的文档数据,由结果可知,报错:不能插入数据
db.values.insert({title:"java",type:"技术"})

3.4、示例4:多键索引支持唯一性约束

  • 先删除values集合
db.values.drop()

  • 在values集合中新增文档数据如下:
db.values.insert({score:[98,80,67,88]})

  • 在values集合中创建多键索引支持唯一性约束
db.values.createIndex({score:1},{unique:true})

  • 再次在values集合中新增相同的文档数据,由结果可知,报错:不能插入数据
db.values.insert({score:[98,80,67,88]})

  • 再次在values集合中新增部分相同的文档数据,由结果可知,报错:不能插入数据
db.values.insert({score:[80]})

  • 再次在values集合中新增部分相同部分不相同的文档数据,由结果可知,报错:不能插入数据
db.values.insert({score:[80,50]})

相关文章