db.collection.createIndex()

在本页面

定义

  • db.collection. createIndex(键,选项)

    • 在集合上创建索引。

在 version 3.2 中更改:MongoDB 禁止创建version 0索引。要升级现有的 version 0 索引,请参阅Version 0 索引

参数类型描述
keys文献包含字段和 value 对的文档,其中字段是索引 key,value 描述该字段的索引类型。对于字段的升序索引,请指定的 value;对于降序索引,请指定-1的 value。
MongoDB 支持几种不同的索引类型,包括文本地理空间哈希索引。有关更多信息,请参见索引类型
从 3.6 开始,您不能将*指定为索引 name。
options文献可选的。包含一组控制索引创建的选项的文档。有关详细信息,请参阅选项

db.collection.createIndex()createIndexes命令周围的 wrapper。

要最小化 building 索引对副本_set 和分片群集的影响,请使用在副本_Set 上建立索引中所述的滚动索引 build 过程。

选项

options文档包含一组控制索引创建的选项。不同的索引类型可以具有特定于该类型的附加选项。

更改了 version 3.4:添加了对整理选项的支持。

所有索引类型的选项

除非另有说明,否则以下选项适用于所有索引类型:

更改 version 3.0:dropDups选项不再可用。

参数类型描述
backgroundboolean可选的。在后台构建索引,以便操作不会阻止其他数据库活动。在后台指定true到 build。默认的 value 是false
uniqueboolean可选的。创建唯一索引,以便集合不接受索引 key value 与索引中现有 value 匹配的文档的插入或更新。
指定true以创建唯一索引。默认的 value 是false
该选项不适用于哈希索引。
name可选的。索引的 name。如果未指定,MongoDB 通过连接索引字段和 sort order 的名称来生成索引 name。
无论是用户指定还是生成 MongoDB,索引名称(包括其完整命名空间(i.e.database.collection))都不能超过索引名称限制
partialFilterExpression文献可选的。如果指定,则索引仅 references 与匹配过滤器表达式的文档。有关更多信息,请参见部分索引
过滤器表达式可以包括:
等式表达式(i.e.field: value或使用$eq operator),
$exists:true表达式,
$gt$gte$lt$lte表达式,
$type表达式,
$and operator 仅 top-level
您可以指定所有 MongoDB 索引类型partialFilterExpression选项。
version 3.2 中的新内容。
sparseboolean可选的。如果true,则索引仅使用指定字段 references 文档。这些索引使用较少的空间,但在某些情况下(特别是排序)表现不同。默认的 value 是false。有关更多信息,请参见稀疏索引
在 version 3.2 中更改:从 MongoDB 3.2 开始,MongoDB 提供了创建部分索引的选项。部分索引提供了稀疏索引功能的超集。如果您使用 MongoDB 3.2 或更高版本,则部分索引应优先于稀疏索引。
version 2.6 中更改:2 dsphere索引默认为稀疏,并忽略此选项。对于包含2dsphere index key(s)的复合索引以及其他类型的键,只有2dsphere索引字段确定索引是否引用文档。
2 dgeoHaystack文本索引的行为与2 dsphere索引类似。
expireAfterSeconds整数可选的。将 value(以秒为单位)指定为TTL,以控制 long MongoDB 如何保留此集合中的文档。有关此功能的更多信息,请参见通过设置 TTL 使集合中的数据过期。这仅适用于TTL索引。
storageEngine文献可选的。允许用户在_创建索引时以 per-index 为基础配置存储引擎。
storageEngine选项应采用以下形式:
storageEngine: { <storage-engine-name>: <options> }
在验证 creating 索引时指定的存储引擎 configuration 选项,并在复制期间记录到OPLOG以支持具有使用不同存储引擎的成员的副本_set。
version 3.0 中的新内容。

整理选项

version 3.4 中的新内容。

警告
MongoDB 3.2 和早期版本不支持排序规则。在 MongoDB 3.2 及更早版本中,不要使用不受支持的排序规则选项创建索引,因为这会阻止升级到 3.4,这将强制执行更严格的索引选项验证

参数类型描述
collation文献可选的。指定索引的整理
整理允许用户为 string 比较指定 language-specific 规则,例如字母和重音标记的规则。
如果已在集合 level 中指定了排序规则,则:
如果在创建索引时未指定排序规则,MongoDB 将使用集合的默认排序规则创建索引。
如果在创建索引时指定了排序规则,MongoDB 将使用指定的排序规则创建索引。
排序规则选项具有以下语法:
排序规则:{
locale:<string>,
caseLevel:<boolean>,
caseFirst:<string>,
strength:<int>,
numericOrdering:<boolean>,
alternate:<string>,
maxVariable:<string>,
backwards :<boolean>
}
指定排序规则时,locale字段是必填字段;所有其他校对字段都是可选的。有关字段的说明,请参阅整理文件
version 3.4 中的新内容。

以下索引仅支持简单的二进制比较,不支持整理

小费
要在具有 non-simple 归类的集合上创建text2dgeoHaystack索引,必须在创建索引时显式指定{collation: {locale: "simple"} }

整理和索引使用

如果已在集合 level 中指定了排序规则,则:

  • 如果在创建索引时未指定排序规则,MongoDB 将使用集合的默认排序规则创建索引。

  • 如果在创建索引时指定了排序规则,MongoDB 将使用指定的排序规则创建索引。

小费
通过指定12的归类strength,可以创建 case-insensitive 索引。 1的整理strength的索引是变音符号和 case-insensitive。

与其他索引选项不同,您可以使用不同的排序规则在同一 key(s 上创建多个索引。要使用相同的 key pattern 但不同的排序规则创建索引,必须提供唯一的索引名称。

要使用索引进行 string 比较,操作还必须指定相同的排序规则。也就是说,如果操作指定了不同的排序规则,则具有排序规则的索引不能支持对索引字段执行 string 比较的操作。

对于 example,集合myColl在 string 字段category上有一个索引,其中包含整理 locale "fr"

db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )

以下查询操作(指定与索引相同的排序规则)可以使用索引:

db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )

但是,以下查询操作(默认情况下使用“简单”二进制文件夹)无法使用索引:

db.myColl.find( { category: "cafe" } )

对于索引前缀键不是 strings,数组和嵌入文档的复合索引,指定不同排序规则的操作仍然可以使用索引来支持对索引前缀键的比较。

对于 example,集合myColl在数字字段scoreprice以及 string 字段category上具有复合索引;使用用于 string 比较的排序规则 locale "fr"创建索引:

db.myColl.createIndex(
   { score: 1, price: 1, category: 1 },
   { collation: { locale: "fr" } } )

以下操作(使用"simple"二进制排序规则进行 string 比较)可以使用索引:

db.myColl.find( { score: 5 } ).sort( { price: 1 } )
db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )

以下操作在索引的category字段上使用"simple"二进制排序规则进行 string 比较,可以使用索引仅满足查询的score: 5部分:

db.myColl.find( { score: 5, category: "cafe" } )

文本索引的选项

以下选项仅适用于文本索引:

参数类型描述
weights文献可选的。对于文本索引,包含字段和权重对的文档。权重是 1 到 99,999 之间的整数,并且表示该字段相对于其他索引字段在分数方面的重要性。您可以为部分或全部索引字段指定权重。请参阅使用权重控制搜索结果以调整分数。默认的 value 是1
default_language可选的。对于文本索引,确定停用词列表的语言以及词干分析器和标记生成器的规则。有关可用语言,请参阅文本搜索语言;有关详细信息和示例,请参阅指定文本索引的语言。默认的 value 是english
language_override可选的。对于文本索引,集合文档中字段的 name 包含文档的覆盖语言。默认的 value 是language。有关 example,请参阅使用任何字段指定文档的语言
textIndexVersion整数可选的。 text索引 version number。用户可以使用此选项覆盖默认的 version number。
有关可用版本,请参阅版本
version 2.6 中的新内容。

2dsphere 索引的选项

以下选项仅适用于2 dsphere索引:

参数类型描述
2dsphereIndexVersion整数可选的。 2dsphere索引 version number。用户可以使用此选项覆盖默认的 version number。
有关可用版本,请参阅版本
version 2.6 中的新内容。

2d 索引的选项

以下选项仅适用于2 d索引:

参数类型描述
bits整数可选的。对于2 d索引,存储位置数据的地理散列 value 的精度数。
bits value 的范围是 1 到 32(含)。默认的 value 是26
min可选的。对于2 d索引,经度和纬度值的下包含边界。默认的 value 是-180.0
max可选的。对于2 d索引,经度和纬度值的上包含边界。默认的 value 是180.0

geoHaystack 索引的选项

以下选项仅适用于geoHaystack索引:

参数类型描述
bucketSize对于geoHaystack索引,请指定要对位置值进行分组的单位数; i.e。 group 在同一个存储桶中的那些位置值在指定的单位数内。
value 必须大于 0。

行为

createIndex()方法具有此处描述的行为。

警告
Foreground 索引构建会阻止数据库上的所有其他操作。

  • 更改了 version 3.4.

要添加或更改排序规则以外的索引选项,必须使用dropIndex()方法删除索引,并使用新选项发出另一个db.collection.createIndex()操作。

  • 如果使用一组选项创建索引,然后在不先删除索引的情况下发出具有相同索引字段和不同选项(不包括排序规则)的db.collection.createIndex()方法,则db.collection.createIndex()将不会使用新选项重建现有索引。

  • 与其他索引选项不同,您可以使用不同的排序规则在同一 key(s 上创建多个索引。要使用相同的 key pattern 但不同的排序规则创建索引,必须提供唯一的索引名称。

  • 如果使用相同的索引规范同时多次调用db.collection.createIndex(),则只有第一个操作会成功。所有其他操作都不起作用。

  • 如果现有文档的索引条目超过Maximum Index Key Length,MongoDB 将不会**在集合上创建索引。以前版本的 MongoDB 会创建索引但不会索引此类文档。

例子

在单个字段上创建升序索引

以下 example 在字段orderDate上创建升序索引。

db.collection.createIndex( { orderDate: 1 } )

如果keys文档指定了多个字段,则createIndex()创建复合指数

在多个字段上创建索引

以下 example 在orderDate字段(在升序 order 中)和zipcode字段(在降序 order.)中)创建复合索引

db.collection.createIndex( { orderDate: 1, zipcode: -1 } )

复合索引不能包含哈希指数 component。

注意
索引的 order 对于使用索引支持sort()操作很重要。

使用指定的排序规则创建索引

version 3.4 中的新内容。

以下 example 创建名为category_fr的索引。 example 使用整理创建索引,指定 locale fr和比较强度2

db.collection.createIndex(
   { category: 1 },
   { name: "category_fr", collation: { locale: "fr", strength: 2 } }
)

以下 example 使用整理创建名为date_category_fr的复合索引。排序规则仅适用于具有 string 值的索引键。

db.collection.createIndex(
   { orderDate: 1, category: 1 },
   { name: "date_category_fr", collation: { locale: "fr", strength: 2 } }
)

排序规则适用于值为 string 的索引键。

对于使用相同排序规则的索引键的查询或排序操作,MongoDB 可以使用索引。有关详细信息,请参阅整理和索引使用

附加信息

Updated at: 9 months ago
db.collection.count()Table of contentdb.collection.createIndexes()