给MongoDB添加索引

摘要:
任何使用过数据库的人都知道,数据库索引类似于书籍索引,用于帮助快速搜索。MongoDB的索引与关系数据库的索引几乎相同。
用过数据库的都知道,数据库索引与书籍的索引类似,都是用来帮助快速查找的。
 
MongoDB的索引跟关系型数据库的索引几乎一致。
 
 
 
1. 索引的创建
 
mongodb采用ensureIndex来创建索引,如:
 
db.user.ensureIndex({"name":1})
 
表示在user集合的name键创建一个索引,这里的1表示索引创建的方向,可以取值为1和-1
 
在这里面,我们没有给索引取名字,mongodb会为我们取一个默认的名字,规则为keyname1_dir1_keyname2_dir2...keynameN_dirN
 
keyname表示键名,dir表示索引的方向,例如,上面的例子我们创建的索引名字就是name_1
 
 
 
索引还可以创建在多个键上,也就是联合索引,如:
 
> db.user.ensureIndex({"name":1,"age":1})
 
这样就创建了name和age的联合索引
 
 
 
除了让mongodb默认索引的名字外,我们还可以去一个方便记的名字,方法就是为ensureIndex指定name的值,如:
 
> db.user.ensureIndex({"name":1},{"name":"IX_name"})
 
这样,我们创建的索引的名字就叫IX_name了
 
 
 
2. 唯一索引
 
与RDB类似,我们也可以定义唯一索引,方法就是指定unique键位true:
 
>db.user.ensureIndex({"name":1},{"unique":true})
 
 
 
3.查看我们建立的索引
 
索引的信息存在每个数据库的system.indexes集合里面,对这个集合只能有ensureIndex和dropIndexes进行修改,不能手动插入或修改集合。
 
通过> db.system.indexes.find()可以找到数据库中多有的索引:
 
> db.system.indexes.find() 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.entities", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.blog", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.authors", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.papers", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.analytics", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.user", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.food", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.user.info", "name" : "_id_" } 
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.userinfo", "name" : "_id_" } 
{ "v" : 1, "key" : { "name" : 1 }, "ns" : "test.user", "name" : "IX_name" }
 
 
 
4.删除索引
 
如果索引没有用了,可以使用dropIndexes将其删掉:
 
> db.runCommand({"dropIndexes":"user","index":"IX_name"}) 
{ "nIndexesWas" : 2, "ok" : 1 }
 
ok表示删除成功

免责声明:文章转载自《给MongoDB添加索引》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇下载和使用 Open XML PowerTools老八经典语录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql设计表结构数据类型的选择

选择合适的数据类型 在使用MySQL创建数据表的时候会遇到一个问题,如何为字段选择合适的数据类型.比如创建一个员工信息表,每个字段都可以用很多种类型来定义, int,char,float等等. char和varchar char和varchar都是用来存储字符串类型的数据,但是他们保存和检索的方式不一样.char属于固定长度的字符类型,二varchar属于...

本地部署easy-mock

安装nvm管理多node版本 因为easy-mock 仅支持node8.x版本 所以需要同时存在低版本node nvm 用于管理多个node版本的工具。 安装: 点击 下载地址 进入nvm下载页面; 选择最新版本,进去之后选择nvm-setup.zip安装版,下载之后解压安装即可; # 更换淘宝源 nvm node_mirror https://npm...

小程序对mongodb日期显示处理问题

描述:微信小程序开发后端数据库使用的是mongodb。其中有个字段为日期类型,这样在查询数据显示的时候如下:/Date(1584538219495)/   为了能够正常的显示日期需要使用js处理一下。 js函数 //处理日期 changeDateFormat: function (cellval){ var dateVal = cellva...

高并发的几种处理方法

并发(英文Concurrency),其实是一个很泛的概念,字面意思就是“同时做多件事”,不过方式有所不同。在.NET的世界里面,处理高并发大致有以下几种方法: 1.异步编程 异步编程就是使用future模式(又称promise)或者回调机制来实现(Non-blocking on waiting)。如果使用回调或事件来实现(容易callback hell),...

rabbitMq 索引 restfullApi 笔记

rabbitMq相关技术 什么是MQ? 消息队列(message Queue)本质上是个队列 FIFO先进先出 队列中放的是消息。 主要用途: 不同进程/线程thread之间的通信 为什么会使用消息队列? 1. 不同进程(process)之间传递消息的时候,两个进程之间耦合度过高,当改变其中一个进程时,那么另一个进程也将必须改变。使用MQ后可以先将消息放在...

squid反向代理基本概述及性能事项

一、基本概念 squid反向代理作web加速是大型网站的常用模式。1. squid来自于1990的cache harvest项目。这个项目一个分支形成squid,另一个形成netapp的netcache产品(netapp的netcache是固化在其硬件产品中的,整体价格很贵) 2.squid是硬盘缓存,其使用内存作缓存内容的索引(一个索引在32位系统中大小...