createIndexes
¶在集合上建立一个或多个索引。
该createIndexes
命令采用以下形式:
该createIndexes
命令包含以下字段:
领域 | 类型 | 描述 |
---|---|---|
createIndexes |
串 | 要为其创建索引的集合。 |
indexes |
数组 | 指定要创建的索引。数组中的每个文档都指定一个单独的索引。 |
writeConcern |
文献 | 可选的。表达书面关切的文件。省略使用默认的写关注。 3.4版的新功能。 |
indexes
数组中的每个文档都可以包含以下字段:
领域 | 类型 | 描述 |
---|---|---|
key |
文献 | 指定索引的字段。对于每个字段,请指定一个键值对,其中key是要索引的字段的名称,值是index direction或index type。如果指定方向,则指定 MongoDB支持几种不同的索引类型,包括 text,geospatial和hashed索引。有关 更多信息,请参见索引类型。 在版本4.2中进行了更改: MongoDB 4.2 通配符索引 支持工作负载,用户可以在其中查询自定义字段或集合中多种字段:
通配符索引键必须使用上面列出的语法之一。例如,您不能指定 复合索引键。有关通配符索引的更完整文档(包括对其创建的限制),请参见通配符索引限制。 该featureCompatibilityVersion必须创建通配符索引。有关设置fCV的说明,请参阅
在MongoDB 4.2部署上设置功能兼容版本。 有关创建通配符索引的示例,请参见 创建通配符索引。 |
name |
串 | 唯一标识索引的名称。 |
background |
布尔值 | 可选的。在MongoDB 4.2中已弃用。
|
unique |
布尔值 | 可选的。创建唯一索引,以便在索引键值与索引中现有值匹配的集合中,该集合将不接受文档的插入或更新。 指定 该选项不适用于哈希 索引。 |
partialFilterExpression |
文献 | 可选的。如果指定,则索引仅引用与过滤器表达式匹配的文档。有关更多信息,请参见部分索引。 过滤器表达式可以包括: 您可以 3.2版中的新功能。 |
sparse |
布尔值 | 可选的。如果为 默认情况下,以下索引类型是稀疏的,并且忽略此选项: 对于包含 |
expireAfterSeconds |
整数 | 可选的。指定一个值(以秒为单位)作为TTL,以控制MongoDB在此集合中保留文档的时间。有关此功能的更多信息,请参见 通过设置TTL从集合中过期数据。这仅适用于TTL索引。 |
storageEngine |
文献 | 可选的。允许用户在创建索引时基于每个索引配置存储引擎。 该 创建索引时进行验证,并记录到指定的存储引擎的配置选项OPLOG复制到支持副本集与使用不同的存储引擎成员中。 |
weights |
文献 | 可选的。对于文本索引,是包含字段和权重对的文档。权重是一个介于1到99,999之间的整数,表示得分相对于其他索引字段的字段的重要性。您可以为某些或所有索引字段指定权重。请参阅
使用权重控制搜索结果以调整分数。默认值为1 。 |
default_language |
串 | 可选的。对于文本索引,该语言用于确定停用词列表以及词干分析器和令牌生成器的规则。有关更多信息和示例,请参见文本搜索语言以获取可用语言和为文本索引指定语言。默认值为english 。 |
language_override |
串 | 可选的。对于文本索引,是集合文档中包含文档替代语言的字段名称。默认值为language 。有关示例,请参见
使用任何字段指定文档的语言。 |
textIndexVersion |
整数 | 可选的。该 有关可用版本,请参见“ 版本”。 |
2dsphereIndexVersion |
整数 | 可选的。该 有关可用版本,请参见版本。 |
bits |
整数 | 可选的。对于2d索引,位置数据的存储geohash值的精度数。 的 |
min |
数 | 可选的。对于2d索引,经度和纬度值的下界边界。默认值为-180.0 。 |
max |
数 | 可选的。对于2d索引,是经度和纬度值的包含上边界。默认值为180.0 。 |
bucketSize |
数 | 对于geoHaystack索引,请指定用于对位置值进行分组的单位数;也就是说,在同一存储桶中将彼此在指定数量单位内的位置值分组。 该值必须大于0。 |
collation |
文献 | 可选的。指定索引的排序规则。 归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。 如果您在集合级别指定了排序规则,则:
排序规则选项具有以下语法: 指定排序规则时,该 3.4版的新功能。 |
wildcardProjection |
文献 | 可选的。 允许用户使用
键模式在通配符索引中包括或排除特定的字段路径。仅当在所有文档字段上创建通配符索引时,此选项才有效。如果在特定字段路径及其子字段上创建通配符索引,则无法指定此选项,例如
该 该
除了显式包含 |
所述mongo
外壳提供了方法
db.collection.createIndex()
和
db.collection.createIndexes()
作为包装的
createIndexes
命令。
在MongoDB 4.2中已更改
从4.2版开始,对于featureCompatibilityVersion设置为"4.2"
或更大的版本,MongoDB删除了
最大127个字节的限制。在featureCompatibilityVersion(fCV)设置为以前的版本或MongoDB版本
中
,索引名称必须在内
。Index Name Length
"4.0"
limit
开始在4.2版本中,createIndexes
命令和mongo
贝壳助手
db.collection.createIndex()
和
db.collection.createIndexes()
,如果你有一个名称创建一个索引报告错误,然后再次尝试,但与另一名创建相同的指数。
在以前的版本中,MongoDB不会再次创建索引,而是将返回一个ok
值为的响应对象1
和一个注释,表示未重新创建索引。例如:
以下索引仅支持简单的二进制比较,不支持排序规则:
小费
要创建一个text
,一个2d
,或者geoHaystack
对具有非简单归类的集合索引,你必须明确指定创建索引时。{collation: {locale: "simple"} }
在版本4.2中进行了更改。
对于featureCompatibilityVersion "4.2"
,createIndexes
使用优化的构建过程,该过程在索引构建的开始和结束时获取并持有对指定集合的排他锁。集合上的所有后续操作必须等到createIndexes
释放排他锁。createIndexes
允许在大多数索引构建期间交错进行读写操作。
对于featureCompatibilityVersion "4.0"
,createIndexes
使用4.2之前的索引构建过程,默认情况下,该过程在构建过程的整个过程中获取父数据库的互斥锁。4.2之前的构建过程将阻止对数据库及其所有集合的所有操作,直到操作完成。background
索引不使用排他锁。
有关的锁定行为的更多信息createIndexes
,请参见
填充集合上的索引构建。
在版本3.4中更改:createIndexes
支持在集合上构建一个或多个索引。createIndexes
使用内存和磁盘上的临时文件的组合来完成索引构建。默认的内存使用限制createIndexes
为500 MB,由单个createIndexes
命令建立的所有索引之间共享。达到内存限制后,请createIndexes
在目录_tmp
内
名为的子目录中使用临时磁盘文件--dbpath
来完成构建。
您可以通过设置maxIndexBuildMemoryUsageMegabytes
服务器参数来覆盖内存限制
。设置更高的内存限制可能会导致更快完成大于500 MB的索引构建。但是,将此限制相对于系统上未使用的RAM设置得太高会导致内存错误。
除排序规则选项外,如果您创建具有一组索引选项的索引,然后尝试重新创建相同的索引但具有不同的索引选项,则MongoDB不会更改选项,也不会重新创建索引。
要更改这些索引选项,请db.collection.dropIndex()
在createIndexes
使用新选项之前
删除现有索引
。
3.4版的新功能。
与其他索引选项不同,您可以在具有不同排序规则的同一键上创建多个索引。要创建具有相同键模式但排序规则不同的索引,必须提供唯一的索引名称。
如果您在集合级别指定了排序规则,则:
小费
通过指定整理strength
的1
或者2
,你可以创建一个不区分大小写的索引。排序规则strength
为的索引1
不区分大小写,也不区分大小写。
要将索引用于字符串比较,操作还必须指定相同的排序规则。即,具有排序规则的索引不能支持对索引字段进行字符串比较的操作(如果该操作指定了不同的排序规则)。
例如,该集合myColl
在category
具有排序规则语言环境的字符串字段上具有索引"fr"
。
以下查询操作指定与索引相同的排序规则,可以使用索引:
但是,默认情况下使用“简单”二进制整理程序的以下查询操作不能使用索引:
对于索引前缀键不是字符串,数组和嵌入式文档的复合索引,指定其他排序规则的操作仍可以使用索引来支持索引前缀键的比较。
例如,集合myColl
在数字字段score
和price
字符串字段
上具有复合索引category
;使用排序规则语言环境创建索引以
"fr"
进行字符串比较:
使用"simple"
二进制排序规则进行字符串比较的以下操作可以使用索引:
下面的操作使用"simple"
二进制排序规则对索引category
字段进行字符串比较,该操作可以使用索引仅满足查询的一部分:score: 5
4.2版中的新功能。
_id
默认情况下,通配符索引会忽略该字段。要将_id
字段包括
在通配符索引中,必须在wildcardProjection
文档中明确包含它:
除了显式包含 _id
字段外,您无法在wildcardProjection
文档中组合包含和排除语句
。
该featureCompatibilityVersion必须创建通配符索引。有关设置fCV的说明,请参阅
在MongoDB 4.2部署上设置功能兼容版本。mongod
4.2
通配符索引不支持以下索引类型或属性:
有关通配符索引限制的完整文档,请参阅 通配符索引限制。
以下命令inventory
在products
数据库集合上建立两个索引:
索引成功完成构建后,MongoDB将返回一个状态为的结果文档。"ok" : 1
新的4.2版:该featureCompatibilityVersion必须创建通配符索引。有关设置fCV的说明,请参阅
在MongoDB 4.2部署上设置功能兼容版本。mongod
4.2
有关通配符索引的完整文档,请参见 通配符索引。
以下列出了通配符索引创建的示例: