php 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_id、dt、data、status。

给 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_id 和 dt 两个字段,创建组合索引:

> 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 天之外的范围,会自动过期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值