db.collection.createIndex()

在本页面

Definition

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

Parameter Type Description
keys document 包含字段和值对的文档,其中字段是索引键,值描述该字段的索引类型。对于字段上的升序索引,请指定1的值;对于降序索引,请指定-1的值。


MongoDB 支持几种不同的索引类型,包括textgeospatialhashed索引。有关更多信息,请参见index types
从 3.6 开始,您不能指定*作为索引名称。
| options |文档|可选。包含一组用于控制索引创建的选项的文档。有关详细信息,请参见Options

db.collection.createIndex()createIndexes命令的包装。

为了最大程度地减少对副本集和分片群集构建索引的影响,请按照在副本集上构建索引所述使用滚动索引构建过程。

Options

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

在版本 3.4 中进行了更改:添加了对collation option的支持。

所有索引类型的选项

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

在版本 3.0 中更改:dropDups选项不再可用。

Parameter Type Description
background boolean 可选的。在后台构建索引,因此该操作不会*阻止其他数据库活动。指定true以在后台构建。默认值为false
unique boolean 可选的。创建唯一索引,以便在索引键值与索引中现有值匹配的集合中,该集合将不接受文档的插入或更新。


指定true以创建唯一索引。默认值为false
对于hashed个索引,此选项“不可用”。
| name |字符串|可选。索引名称。如果未指定,则 MongoDB 通过串联索引字段的名称和排序 Sequences 来生成索引名称。
无论是由用户指定还是由 MongoDB 生成,包括完整名称空间(即database.collection)的索引名称都不能长于索引名称限制
| partialFilterExpression |文档|可选。如果指定,则索引仅引用与过滤器表达式匹配的文档。有关更多信息,请参见Partial Indexes
过滤器表达式可以包括:
等式表达式(即field: value或使用$eq运算符),
$exists: true expression,
$gt$gte$lt$lte个表达式,
$type expressions,
$and仅限顶级运算符
您可以为所有 MongoDB index types指定partialFilterExpression选项。
版本 3.2 中的新功能。
| sparse |布尔值|可选。如果为true,则索引仅引用具有指定字段的文档。这些索引使用较少的空间,但是在某些情况下(特别是排序)表现不同。默认值为false。有关更多信息,请参见Sparse Indexes
在版本 3.2 中进行了更改:从 MongoDB 3.2 开始,MongoDB 提供了创建partial indexes的选项。部分索引提供了稀疏索引功能的超集。如果您使用的是 MongoDB 3.2 或更高版本,则partial indexes应该比稀疏索引更可取。
在 2.6 版中更改:默认情况下,2dsphere索引稀疏,并且忽略此选项。对于包含2dsphere索引键以及其他类型的键的复合索引,只有2dsphere索引字段确定该索引是否引用文档。
2dgeoHaystacktext索引的行为类似于2dsphere索引。
| expireAfterSeconds |整数|可选。将值(以秒为单位)指定为TTL,以控制 MongoDB 在此集合中保留文档的时间。有关此功能的更多信息,请参见通过设置 TTL 使集合中的数据过期。这仅适用于TTL个索引。
| storageEngine |文档|可选。允许用户在创建索引时基于每个索引配置存储引擎。
storageEngine选项应采用以下形式:
storageEngine: { <storage-engine-name>: <options> }
在复制期间验证在创建索引时指定的存储引擎配置选项,并将其记录到oplog上,以支持具有使用不同存储引擎的成员的副本集。
3.0 版中的新功能。

整理选项

3.4 版的新功能。

Warning

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

Parameter Type Description
collation document 可选的。指定索引的collation


Collation允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
如果您在集合级别指定了排序规则,则:
如果在创建索引时未指定排序规则,则 MongoDB 将使用集合的默认排序规则创建索引。
如果在创建索引时确实指定了排序规则,则 MongoDB 会使用指定的排序规则创建索引。
排序规则选项具有以下语法:
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
指定排序规则时,locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation Document
3.4 版中的新功能。

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

Tip

要在具有非简单排序规则的集合上创建text2dgeoHaystack索引,必须在创建索引时明确指定{collation: {locale: "simple"} }

排序规则和索引的使用

如果您在集合级别指定了排序规则,则:

Tip

通过指定12的排序规则strength,可以创建不区分大小写的索引。排序规则strength1的索引不区分字母和大小写。

与其他索引选项不同,您可以在具有不同排序规则的同一键上创建多个索引。要创建具有相同键模式但归类不同的索引,必须提供唯一的索引名称。

要将索引用于字符串比较,操作还必须指定相同的排序规则。也就是说,如果排序规则的索引指定了不同的排序规则,则该索引不能支持对索引字段执行字符串比较的操作。

例如,集合myColl在具有排序规则语言环境"fr"的字符串字段category上具有索引。

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

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

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

但是,默认情况下使用“简单”二进制整理程序的以下查询操作不能使用索引:

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

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

例如,集合myColl在数字字段scoreprice和字符串字段category上具有复合索引;使用排序规则语言环境"fr"创建索引以进行字符串比较:

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

以下使用"simple"二进制排序规则进行字符串比较的操作可以使用索引:

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

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

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

文本索引的选项

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

Parameter Type Description
weights document 可选的。对于text索引,该文档包含字段和权重对。权重是一个介于 1 到 99,999 之间的整数,表示该得分相对于其他索引字段的得分的重要性。您可以为某些或所有索引字段指定权重。请参阅用权重控制搜索结果以调整分数。默认值为1
default_language string 可选的。对于text索引,该语言用于确定停用词列表以及词干分析器和令牌生成器的规则。有关可用语言,请参见Literals 搜寻语言,有关更多信息和示例,请参见指定文本索引的语言。默认值为english
language_override string 可选的。对于text索引,是集合文档中包含文档替代语言的字段名称。默认值为language。有关示例,请参见使用任何字段来指定文档的语言
textIndexVersion integer 可选的。 text索引版本号。用户可以使用此选项覆盖默认版本号。


有关可用版本,请参见Versions
2.6 版中的新功能。

2dsphere 索引的选项

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

Parameter Type Description
2dsphereIndexVersion integer 可选的。 2dsphere索引版本号。用户可以使用此选项覆盖默认版本号。


有关可用版本,请参见Versions
2.6 版中的新功能。

二维索引的选项

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

Parameter Type Description
bits integer 可选的。对于2d索引,是所存储的geohash位置数据值的精度数。


bits值的范围是 1 到 32(含)。缺省值为26
| min |数字|可选。对于2d索引,经度和纬度值的下界边界。缺省值为-180.0
| max |数字|可选。对于2d索引,是经度和纬度值的包含上边界。缺省值为180.0

geoHaystack 索引的选项

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

Parameter Type Description
bucketSize number 对于geoHaystack索引,请指定用于分组位置值的单位数;即在同一存储桶中将彼此位于指定数量单位内的位置值分组。


该值必须大于 0.

Behaviors

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

Warning

前景索引构建会阻止数据库上的所有其他操作。

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

Examples

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

以下示例在字段orderDate上创建一个升序索引。

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

如果keys文档指定多个字段,则createIndex()创建compound index

在多个字段上创建索引

下面的示例在orderDate字段(按升序)和zipcode字段(按降序)上创建复合索引。

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

复合索引不能包含hashed index组件。

Note

索引的 Sequences 对于支持使用该索引的sort()操作很重要。

创建指定排序规则的索引

3.4 版的新功能。

以下示例创建一个名为category_fr的索引。该示例使用collation创建索引,该索引指定语言环境fr和比较强度2

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

下面的示例创建一个带有collation的名为date_category_fr的复合索引。排序规则仅适用于具有字符串值的索引键。

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

排序规则适用于值为字符串的索引键。

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

Additional Information

首页