参考博客: https://blog.csdn.net/weixin_33446857/article/details/83085018
http://c.biancheng.net/view/6558.html
1,单键索引
mongodb支持文档集合中任何字段的索引. 最常见的是,默认情况下,所有集合在_id字段上都有一个索引.
2,复合索引
当我们的查询条件不止有一个时,就需要建立复合索引.
3,多键索引
如果文档中含有array类型字段,可以直接对其名称建立索引,这样mongodb就会为内嵌数组中的每个元素建立一个独立的索引.
注意: 多键索引不等于在多列字段上创建索引(复合索引).
4,过期索引
过期索引是在一段时间后会过期的索引. 在索引过期后,对应的数据会被删除. 这适合存储一些在一段时间之后会失效的数据.比如用户的登录信息,存储的日志等.
5,散列索引(哈希索引):
指按照某个字段的散列值来建立索引.
6,全文索引(文本索引):
mongodb提供的文本索引支持对字符串内容的全文搜索查询.
7,地理位置索引
将一些点的位置存储在mongodb中.创建索引后,能够依照位置来查找其他点.
1,新建索引
db.collection_name.createIndex();
1.1创建单索引
db.collection_name.createIndex(keys[,options]);
createIndex()接收可选参数.可选参数列表如下:
参数 类型 描述
background Boolean 建索引过程会堵塞其他数据库操作,background可指定以后台方式创建索引,即添加 “background” 可选參数。 “background” 默认值为false。
unique Boolean 建立的索引是否唯一。
指定为true创建唯一索引。默认值为false.
name string 索引的名称。
假设未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDups Boolean 在建立唯一索引时是否删除反复记录,指定 true 创建唯一索引。默认值为 false.
sparse Boolean 对文档中不存在的字段数据不启用索引。这个參数须要特别注意。假设设置为true的话,在索引字段中不会查询出不包括相应字段的文档.。默认值为 false.
expireAfterSeconds integer 指定一个以秒为单位的数值,完毕 TTL设定,设定集合的生存时间。
V index version 索引的版本号号。
默认的索引版本号取决于mongod创建索引时执行的版本号。
weigth document 索引权重值。数值在 1 到 99,999 之间,表示该索引相对于其它索引字段的得分权重。
default_language string 对于文本索引。该參数决定了停用词及词干和词器的规则的列表。 默认的英语
language_override string 对于文本索引。该參数指定了包括在文档中的字段名。语言覆盖默认的language,默认值为 language.
1.2,复合索引
当我们的查询条件不止有一个时,就需要建立复合索引.
语法
db.collection_name.createIndex(key1:1,key2:1)
1.3,多键索引
如果文档中含有array类型字段,可以直接对其名称建立索引,这样mongodb就会为内嵌数组中的每个元素建立一个独立的索引.
注意: 多键索引不等于在多列字段上创建索引(复合索引).
多键索引与单键索引创建形式相同,差别在于字段的类型.
语法:
db.collection_name.createIndex({key:<1 or -1>})
1.4,复合多键索引
对于一个复合多键索引,每个索引最多可以包含一个数组.
在多于一个数组的情形下来创建复合多键索引不被支持.
1.5,部分索引
mongodb部分索引只为那些在一个集合中,满足指定的筛选条件的文档创建索引.
部分索引通过指定过滤条件来创建,可以为mongodo支持的所有索引类型使用部分索引.
简单点说: 部分索引就是带有过滤条件的索引,即索引只存在于某些文档之上.
创建部分索引的语法:
db.collection_name.createIndex(keys,options)
options可以使用partialFilterExpression,即部分过滤表达式,其类型为文档类型.
过滤表达式通常包括:
e
x
i
s
t
s
,
exists,
exists,gt,
g
t
e
,
gte,
gte,lt,
l
t
e
,
lte,
lte,type,$and
#创建部分唯一索引的一些限制.
部分索引只为集合中那些满足指定的筛选条件的文档创建索引。 如果你指定的partialfilterexpression和唯一约束、那么唯一性约束只适用于满足筛选条件的文档。 具有唯一约束的部分索引不会阻止不符合唯一约束且不符合过滤条件的文档的插入。
1.6,文本索引 (全文索引)
mongodb提供文本索引支持对字符串内容的文本搜索查询.text索引可以包括其值为字符串或字符串数组的任何字段.
文本索引,顾名思义就是用于搜索文本的,可以用于搜索所有的velue,也可以搜索指定的field对应的value.只要field对应的value是string,或者对应的value是array且array中的元素是string,那么文本索引都可以索引该field.
注意: 一个集合最多只能有一个文本索引.
要创建text索引,请使用该db.collection.createIndex()方法.要索引包含字符串或字符串元素数组的字段,请包涵该字段并”text”在索引文档中指定字符串文字.
如以下示例所示:
db.collection.createIndex({keys:”text”})
也可以创建多个字段text,例如
db.collection.createIndex({subject:”text”,comments:”text”})
1.7,唯一索引
只要指定了某个field是唯一的,那么在同一个集合中就不允许存在相同的field值,mongodb默认创建的唯一索引就是_id.
唯一索引一般是这样创建的:
db.collection.createIndex({“user_id”:1},{unique:true})
2,查看索引
db.collection.getIndexes() 方法可以用来查看集合的所有索引
getIndexKeys() 方法查看索引键
totalIndexSize() 查看集合索引的总大小
getIndexSpace() 方法查看集合各索引的详细信息.
3,删除索引
不再需要的索引,我们可以将其删除,mongodb提供两种删除索引的方法:
dropIndex()方法用于删除指定的索引
dropIndexes()方法用于删除全部的索引
4,修改索引
若要修改现有索引,则需要删除现有索引并重新创建索引.
注:
1>mongdb中索引是大小写敏感的.
2>当更新对象时,只有索引上的这些key发生变化时才更新.这极大的提高了性能.当对象增长了或者必须移动时,所有的索引必须更新,这会很慢.
3>索引信息会保存在system.indexs集合中,运行db.system.index.find()能够看到这些事例数据.
4>索引的字段的大小有最大限制,目前接近800bytes. 可在大于这个值的字段上建立索引是可以的,但是该字段不会被索引,这种限制在以后的版本中可能被移除。