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

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB——索引属性之唯一索引(Unique Indexes)相关的知识,希望对你有一定的参考价值。

目录

一、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])
    

以上是关于MongoDB——索引属性之唯一索引(Unique Indexes)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:数组元素属性的唯一索引

MongoDB索引相关文章-摘自网络

MongoDB创建索引

mongodb 索引唯一性约束

MongoDB——索引属性之部分索引(Partial Indexes)

MongoDB——索引属性之部分索引(Partial Indexes)