MongoDB 基础教程

MongoDB 高级教程

MongoDB 笔记

MongoDB 创建索引(index)命令详解


索引是为了高效查询所设置,MongoDB 也不例外,它支持不同形式的索引,创建索引使用 db.collection.createIndex() 命令。

命令详解

命令语法

命令的格式如下:

> db.{collection_name}.createIndex(keys, options)

其中,collection_name 是所要创建索引的集合名称;keys 指定针对集合的要建索引的 field 项,options 里设置索引相关的配置项,如唯一属性及过期时间等。

参数 类型 描述
keys 文档 (必选项),指定集合中要建立索引的字段和排序形式。
options 文档 (可选项),指定索引的配置相关信息。

 可选项 options 参数有如下可配置项:

字段 类型 描述 备注
background 布尔 (可选项),表示是否通过后台方式建立索引,默认为 false,即表示建索引过程会阻塞其它数据库操作;若为 true,则以后台方式创建索引。 从 4.2 版本开始废弃,会使用优化的建索引操作,尽量不会阻塞其它操作。
unique 布尔 (可选项),表示建立的索引是否是唯一索引,默认为 false。 该选项针对 hash 结构的索引不起作用。
name 字符串 (可选项),指定索引的名称,如果不设置,MongoDB 会将所指定的索引和排序方式联结拼在一起生成一个索引名。  
expireAfterSeconds 数值 (可选项),指定一个以秒为单位的数值,完成 TTL(生存时间)设定,即经过设置的时间后,文档会失效。 选定的字段必须是 MongoDB 的时间类型才能生效

命令范例

首先进入指定数据库的上下文:

> use test
switched to db test

假设给集合 mycol 的相关字段添加索引,字段有 item_iddtdatastatus

status 字段创建普通的索引

> db.mycol.createIndex({ "status" : 1 }, { "name" : "idx_type" })
{
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 1,
  "numIndexesAfter" : 2,
  "ok" : 1,
  "$clusterTime" : {
    "clusterTime" : Timestamp(1603701396, 2),
    "signature" : {
      "hash" : BinData(0,"ogJcs3E3fdDBlh6Q1a2Gp3kmLKw="),
      "keyId" : NumberLong("6886656746882859010")
    }
  },
  "operationTime" : Timestamp(1603701396, 2)
}

data 字段的内嵌字段 ctr创建内嵌字段索引

> db.mycol.createIndex({ "data.ctr" : 1 }, { "name" : "idx_data_ctr" })

item_iddt 两个字段,创建组合索引

> db.mycol.createIndex({ "item_id" : 1, "dt" : -1 }, { "name" : "idx_item_dt" })

针对 dt 字段,设置 ttl 索引

> db.mycol.createIndex({ "dt" : -1 }, { "name" : "idx_dt", "expireAfterSeconds" : 86400 })

其中 expireAfterSeconds 设置为 86400,表示记录的时间 dt 如果在 1 天之外的范围,会自动过期。