抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

查看索引

# getIndexes() 查看集合的所有索引 db.col.getIndexes() # getIndexKeys() 查看集合中的所有索引键 db.col.getIndexKeys() # totalIndexSize() 查看集合中索引的总大小 db.col.totalIndexSize() # getIndexSpecs() 查看集合各索引的详细信息 db.col.getIndexSpecs()

创建索引

(mongo3.0以上版本)

createIndex() 创建索引 db.col.createIndex(keys, options)

col 为你自己的集合名

Key 值为你要创建的索引字段,1 为指定按升序创建索引,-1 按降序来创建索引。

createIndex() 接收可选参数,可选参数列表如下:

Parameter Type Description
background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加"background" 可选参数。 “background” 默认值为false。
unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false。
name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDup Boolean 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档,默认值为 false。
expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语。
language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language。

实例

创建一个普通索引,key表示字段名,1表示升序排序,-1表示降序。

# 创建一个普通索引,key表示字段名,1表示升序排序,-1表示降序。 db.col.createIndex({"name":1}) # 设置使用多个字段创建聚合索引(关系型数据库中称作复合索引) db.col.createIndex({"name":1,"age":-1}) # 在后台创建索引,通过在创建索引时加 background:true 的选项,让创建工作在后台执行 db.col.createIndex({"name":1,"age":-1}, {background: true})

在后台创建索引的原因:
在前台创建索引期间会锁定数据库,会导致其它操作无法进行数据读写,在后台创建索引,会定期释放写锁,从而保证其它操作的运行,但是后台操作会在耗时更长,尤其是在频繁进行写入的服务器上。

所以创建索引应该注意以下几点:(MongoDB:创建索引需要注意的事项 - 简书)

  1. 数据前把索引创建好
  2. 如果已有数据在,要在后台创建索引
  3. 创建索引最好创建索引名称

复杂索引创建

复合索引在上边创建索引已经提到。

多键索引

为了索引保存数组值的字段,MongoDB为数组中的每个元素创建一个索引键。这些多键索引支持对数组字段的有效查询。可以在既包含标量值[1](例如字符串,数字)又包含嵌套文档的数组上构造多键索引。

#多键索引创建 <field> 表示数组 db.coll.createIndex( { <field>: < 1 or -1 > } )

间隙索引创建

稀疏索引仅包含具有索引字段的文档条目,即使索引字段包含空值也是如此。索引会跳过缺少索引字段的所有文档。索引是“稀疏的”,因为它不包括集合的所有文档。相反,非稀疏索引包含集合中的所有文档,为那些不包含索引字段的文档存储空值。

# 创建一个间隙索引 db.col.createIndex({"name":1}, { sparse: true })

部分索引创建

部分索引仅索引集合中符合指定过滤器表达式的文档。

# 创建age大于5的部分索引 db.col.createIndex( { sex: 1, name: 1 }, { partialFilterExpression: { age: { $gt: 5 } } } )

更新索引

# reIndex() 在name字段上重建倒序索引 db.col.reIndex({"name":-1})

删除索引

#dropIndex() 删除集合指定的索引 db.col.dropIndex("索引名称") #dropIndexes() 删除集合全部的索引 db.col.dropIndexes()

Springboot 创建mongodb 索引

注解创建索引

例子:

单个字段索引创建

@Data @Document("person") public class Person extends MongoEntity { @Indexed private String name; private String age; private String sex;

}

多字段创建索引

@Data @Document("person") @CompoundIndexes({ //创建一个名为compound的复合索引 @CompoundIndex(name = "compound", def = "{'age' : 1, 'sex': 1}") }) public class Person extends MongoEntity { @Indexed private String name; private String age; private String sex;

}

间隙索引

@CompoundIndexes({ //创建一个名为compound的复合索引 @CompoundIndex(name = "compound", def = "{'age' : 1, 'sex': 1}",sparse = true) })

部分索引

官方文档没有提供有关于partialFilterExpression构造的说明。

mongoTemplate构建索引

例子

单个索引

@Test public void template() { Index index = new Index(); index.on("name", Sort.Direction.ASC); mongoTemplate.indexOps("person").ensureIndex(index); for (int i=0;i<5;i++){ Person person = new Person(); person.setName("赵"+i); person.setAge("2"+i); person.setSex("男"); personService.save(person); } }

多个索引,我百度之后连续.on()即可以创建,但我尝试之后只有第一个索引成功。

@Test public void template() { Index index = new Index(); index.on("name", Sort.Direction.ASC) .on("age", Sort.Direction.ASC) //不生效 .on("sex", Sort.Direction.ASC).sparse(); //不生效 mongoTemplate.indexOps("person").ensureIndex(index); for (int i=0;i<5;i++){ Person person = new Person(); person.setName("赵"+i); person.setAge("2"+i); person.setSex("男"); personService.save(person); } }

间隙索引即.sarse()

部分索引

暂无。

mongoTemplate提供了增,删,删除全部,重建,查询这个五种接口。可以逐个尝试。

public interface IndexOperations {

void ensureIndex(IndexDefinition indexDefinition);

void dropIndex(String name);

void dropAllIndexes();

void resetIndexCache();

List<IndexInfo> getIndexInfo();
}

评论