5、唯一索引

先看看之前创建的,rsc索引:

index ---------

{ "name" : "rsc_1" , "ns" : "ms_basic.schedule" , "key" : { "rsc" : 1}}

在rsc字段上,创建唯一索引:

coll.dropIndex(new BasicDBObject("rsc", 1));

coll.ensureIndex(new BasicDBObject("rsc", 1).append("unique", true));

显示结果:

index ---------

{ "name" : "rsc_1_unique_" , "ns" : "ms_basic.schedule" , "key" : { "rsc" : 1 , "unique" : true}}

存在如下rsc=的数据:

{ "_id" : { "$oid" : "4c2fe764dd969674cb31a0be"} , "liveStatus" : 0 , "startDate" : "2010-11-12" , "isList" : 0 , "location" : "CAG" , "posttime" : "2010-04-01 15:04:57.0" , "rsc" : "WRM160513" , "noliveTvName" : "" , "endDate" : "2010-11-12" , "endTime" : "09:30" , "isGold" : 0 , "version" : 0 , "startTime" : "09:30" , "disciplineName" : "摔跤" , "event" : "160" , "gender" : "M" , "isMedal" : 0 , "discipline" : "WR" , "venueId" : "CAG" , "phaseName" : "资格赛" , "isRecommend" : 0 , "isData" : 0 , "eventUnitType" : "HATH" , "chatroomStatus" : 0 , "isChina" : 0 , "isStartTime" : 0 , "competitionStatus" : 0 , "unit" : "13" , "tvName" : "男子古典式 - 60公斤级资格赛" , "flag" : 0 , "scheduleName" : "资格赛" , "isEndTime" : 0 , "rid" : "" , "eventName" : "男子古典式 - 60公斤级" , "phase" : "5" , "isResult" : 0}

往表data中插入一条记录。

System.out.println("-----------华丽分隔线---------------");

    Schedule schedule = new Schedule();

    schedule.setRsc("WRM160513");

    schedule.setScheduleName("重复值");

    BasicDBObject val = new BasicDBObject();

    val.put("rsc","WRM160513");

    val.put("scheuleName","kaokao");

coll.insert(val);

没有报错,查询结果:

{ "_id" : { "$oid" : "4c2fe764dd969674cb31a0be"} , "liveStatus" : 0 , "startDate" : "2010-11-12" , "isList" : 0 , "location" : "CAG" , "posttime" : "2010-04-01 15:04:57.0" , "rsc" : "WRM160513" , "noliveTvName" : "" , "endDate" : "2010-11-12" , "endTime" : "09:30" , "isGold" : 0 , "version" : 0 , "startTime" : "09:30" , "disciplineName" : "摔跤" , "event" : "160" , "gender" : "M" , "isMedal" : 0 , "discipline" : "WR" , "venueId" : "CAG" , "phaseName" : "资格赛" , "isRecommend" : 0 , "isData" : 0 , "eventUnitType" : "HATH" , "chatroomStatus" : 0 , "isChina" : 0 , "isStartTime" : 0 , "competitionStatus" : 0 , "unit" : "13" , "tvName" : "男子古典式 - 60公斤级资格赛" , "flag" : 0 , "scheduleName" : "资格赛" , "isEndTime" : 0 , "rid" : "" , "eventName" : "男子古典式 - 60公斤级" , "phase" : "5" , "isResult" : 0}

注意:java应用中,有个问题,如果数据已经重复了,那么使用:

coll.ensureIndex(new BasicDBObject("rsc", 1).append("unique", true));

是没有错误提示的,此时继续执行插入操作,是成功的。

{ "_id" : { "$oid" : "4c2fe764dd969674cb31a0be"} , "liveStatus" : 0 , "startDate" : "2010-11-12" , "isList" : 0 , "location" : "CAG" , "posttime" : "2010-04-01 15:04:57.0" , "rsc" : "WRM160513" , "noliveTvName" : "" , "endDate" : "2010-11-12" , "endTime" : "09:30" , "isGold" : 0 , "version" : 0 , "startTime" : "09:30" , "disciplineName" : "摔跤" , "event" : "160" , "gender" : "M" , "isMedal" : 0 , "discipline" : "WR" , "venueId" : "CAG" , "phaseName" : "资格赛" , "isRecommend" : 0 , "isData" : 0 , "eventUnitType" : "HATH" , "chatroomStatus" : 0 , "isChina" : 0 , "isStartTime" : 0 , "competitionStatus" : 0 , "unit" : "13" , "tvName" : "男子古典式 - 60公斤级资格赛" , "flag" : 0 , "scheduleName" : "资格赛" , "isEndTime" : 0 , "rid" : "" , "eventName" : "男子古典式 - 60公斤级" , "phase" : "5" , "isResult" : 0}

{ "_id" : { "$oid" : "4c3334ea76c7eebe35fb1f81"} , "rsc" : "WRM160513" , "scheduleName" : "kaokao"}

java中,生成索引结果:

> db.schedule.getIndexes();

[

        {

                "name" : "_id_",

                "ns" : "ms_basic.schedule",

                "key" : {

                        "_id" : 1

                }

        },

        {

                "name" : "rsc_1_unique_",

                "ns" : "ms_basic.schedule",

                "key" : {

                        "rsc" : 1,

                        "unique" : true

                }

        }

]

命令行结果:

> db.schedule.ensureIndex({rsc:1},{unique: true});

> db.schedule.getIndexes();

[

        {

                "name" : "_id_",

                "ns" : "ms_basic.schedule",

                "key" : {

                        "_id" : 1

                }

        },

        {

                "_id" : ObjectId("4c3335de22090000000065d5"),

                "ns" : "ms_basic.schedule",

                "key" : {

                        "rsc" : 1

                },

                "name" : "rsc_1",

                "unique" : true

        }

]

后来检查发现:

应该使用:coll.ensureIndex(new BasicDBObject("rsc", 1),"rsc",true);

而不是:coll.ensureIndex(new BasicDBObject("rsc", 1).append("unique", true));

这种方式相当于创建了组合索引:rsc_unique,是错误的

认真看看API文档说明即可发现。

第五章 MongoDb索引优化 5.4相关推荐

  1. 第五章 MongoDb索引优化 5.6

    7.删除索引 a.删除某个表中的所有索引 To delete all indexes on the specified collection: 命令行:db.collection.dropIndexe ...

  2. 第五章 MongoDb索引优化 5.5

    6.唯一索引中的重复值处理  删除上述5中的索引,插入两行一样的记录 coll.dropIndex("rsc"); 查看索引: index --------- { "na ...

  3. MongoDB索引优化

    MongoDB 索引优化 1. 一图看懂索引原理 2. 查看执行计划 3. 如何建索引 3. 索引的优化 4. 索引的选择机制 5. 优化实践 country_themes 优化 wallpapers ...

  4. 第6章 数据库索引优化

    6-1 Btree索引和Hash索引 Btree索引--顺序存储- B-Tree索引适合Order By 联合索引 ---------------重点内容 Hash索引 -相对比较快- 等值查询 为什 ...

  5. 二十五、MongoDB 索引 和 explain 的使用

    一.索引基础 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快.MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查 询优化技巧. 创建索 ...

  6. Mysql索引优化与查询优化

    索引优化与查询优化 都有哪些维度可以进行数据库调优?简言之: 索引失效.没有充分利用到索引--索引建立 关联查询太多JOIN (设计缺陷或不得已的需求)--SQL优化 服务器调优及各个参数设置(缓冲. ...

  7. 浅谈MySQL的B树索引与索引优化

    转载自   浅谈MySQL的B树索引与索引优化 MySQL的MyISAM.InnoDB引擎默认均使用B+树索引(查询时都显示为"BTREE"),本文讨论两个问题: 为什么MySQL ...

  8. 第10章 MongoDB 删除数据库教程

    MongoDB 删除database 语法 MongoDB 删除database的语法格式如下: db.dropDatabase() 删除当前database,默认为 test,尊敬的读者您可以使用 ...

  9. 第46章 MongoDB 自动增长教程

    第46章 MongoDB 自动增长教程 MongoDB 没有像 SQL 一样有自动增长的功能, MongoDB 的 _id 是系统自动生成的12字节唯一标识. 但在某些情况下,咱们可能需要实现 Obj ...

最新文章

  1. 中国机器翻译的世纪回顾
  2. 泉州中考分数如何计算机,2019年泉州中考总分多少分,泉州中考各个科目多少分...
  3. Java Socket实战之一:单线程通信
  4. 分享一个web页面背景全屏的jquery插件Fullscreen Background
  5. BugkuCTF-Misc:隐写3
  6. 【iHMI43 应用演示】之 modbus 协议(从机)通信演示
  7. php原生sql语法,thinkphp执行原生SQL语句的实现方法
  8. 【操作系统】操作系统的生成
  9. 开源医学图像处理平台NiftyNet简介
  10. 36 万美元套利!3 步骤揭秘黑客 DeFi 闪电贷全过程
  11. D-Link 老款路由器被曝多个高危漏洞,未完全修复
  12. this_scope_call_apply_bind_柯里化 详细分析
  13. 【IDEA】关于 IDEA 中新建 web 项目的 webapp 文件夹没有小蓝点 ,启动服务,访问不到解决方案
  14. 微信小程序:冒泡事件及其阻止
  15. cuda对应pytorh安装
  16. .text urlRewrite介绍
  17. GRE+托福四个半月复习计划
  18. 医院网络安全管理方案
  19. 西游记不单单讲的是故事(1) ------ 摘自 吴闲云的《煮酒探西游》
  20. c# timer 销毁_.NET中Timer 如何正确地被Dispose

热门文章

  1. Bitmap之位图采样和内存计算详解
  2. java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
  3. spring融合activitymq-all启动报错的解决办法
  4. 网上搜集第三方(一)
  5. 转:openTSDB 2.0 安装
  6. 编程之美 set 17 拈游戏分析 (2)
  7. WinAPI: GetSystemPowerStatus - 获取系统电源状态的信息
  8. Nemo for transfer learning
  9. Agile Development
  10. nothing comes free