On this page
db.collection.createIndexes()
在本页面
Definition
db.collection.
createIndexes
([* keyPatterns *,] * options *)- 3.2 版中的新功能。
在集合上创建一个或多个索引。
Parameter | Type | Description |
---|---|---|
keyPatterns |
document | 包含索引规范文档的数组。每个文档包含字段和值对,其中字段是索引键,而值描述该字段的索引类型。对于字段上的升序索引,请指定1 的值;对于降序索引,请指定-1 的值。 |
MongoDB 支持几种不同的索引类型,包括text,geospatial和hashed索引。有关更多信息,请参见index types。
| options
|文档|可选。包含一组控制索引创建的选项的文档。有关详细信息,请参见Options。
db.collection.createIndexes()是createIndexes命令的包装。
为了最大程度地减少对副本集和分片群集构建索引的影响,请按照在副本集上构建索引所述使用滚动索引构建过程。
Options
options
文档包含一组用于控制索引创建的选项。不同的索引类型可以具有特定于该类型的其他选项。
Important
当您为db.collection.createIndexes()指定选项时,这些选项将应用于所有指定的索引。例如,如果指定排序规则选项,则所有创建的索引都将包括该排序规则。
如果您尝试使用不兼容的选项创建索引,则db.collection.createIndexes()将返回错误。有关更多信息,请参考选项说明。
在版本 3.4 中进行了更改:添加了对collation的支持。
所有索引类型的选项
除非另有说明,否则以下选项可用于所有索引类型:
在版本 3.0 中更改:dropDups
选项不再可用。
Parameter | Type | Description |
---|---|---|
background |
boolean | 可选的。在后台构建索引,因此该操作不会*阻止其他数据库活动。指定true 以在后台构建。默认值为false 。 |
unique |
boolean | 可选的。指定在keyPatterns 数组中指定的每个索引都是unique index。唯一索引将不接受索引键值与索引中现有值匹配的文档的插入或更新。 |
指定true
以创建唯一索引。默认值为false
。
对于hashed个索引,此选项“不可用”。
| name
|字符串|可选。索引名称。如果未指定,则 MongoDB 通过串联索引字段的名称和排序 Sequences 来生成索引名称。
无论是由用户指定还是由 MongoDB 生成,包括完整名称空间(即database.collection
)的索引名称都不能长于索引名称限制。
为db.collection.createIndexes指定的选项适用于键模式数组中包含的所有“索引”规范。由于索引名称必须唯一,因此仅当使用db.collection.createIndexes创建单个索引时,才可以指定名称。
| 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
索引字段确定该索引是否引用文档。
2d,geoHaystack和text索引的行为类似于2dsphere索引。
| expireAfterSeconds
|整数|可选。将值(以秒为单位)指定为TTL,以控制 MongoDB 在此集合中保留文档的时间。有关此功能的更多信息,请参见通过设置 TTL 使集合中的数据过期。这仅适用于TTL个索引。
| storageEngine
|文档|可选。允许用户为创建的索引配置存储引擎。storageEngine
选项应采用以下形式:storageEngine: { <storage-engine-name>: <options> }
在复制期间验证在创建索引时指定的存储引擎配置选项,并将其记录到oplog上,以支持具有使用不同存储引擎的成员的副本集。
3.0 版中的新功能。
整理选项
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:
text indexes,
2d个索引,以及
geoHaystack indexes.
Tip
要在具有非简单排序规则的集合上创建text
,2d
或geoHaystack
索引,必须在创建索引时明确指定{collation: {locale: "simple"} }
。
排序规则和索引的使用
如果您在集合级别指定了排序规则,则:
如果在创建索引时未指定排序规则,则 MongoDB 将使用集合的默认排序规则创建索引。
如果在创建索引时确实指定了排序规则,则 MongoDB 会使用指定的排序规则创建索引。
Tip
通过指定1
或2
的排序规则strength
,可以创建不区分大小写的索引。排序规则strength
为1
的索引不区分字母和大小写。
与其他索引选项不同,您可以在具有不同排序规则的同一键上创建多个索引。要创建具有相同键模式但归类不同的索引,必须提供唯一的索引名称。
要将索引用于字符串比较,操作还必须指定相同的排序规则。也就是说,如果排序规则的索引指定了不同的排序规则,则该索引不能支持对索引字段执行字符串比较的操作。
例如,集合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
在数字字段score
和price
和字符串字段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索引:
bits
值的范围是 1 到 32(含)。缺省值为26
。
| min
|数字|可选。对于2d索引,经度和纬度值的下界边界。缺省值为-180.0
。
| max
|数字|可选。对于2d索引,是经度和纬度值的包含上边界。缺省值为180.0
。
geoHaystack 索引的选项
以下选项仅适用于geoHaystack索引:
Parameter | Type | Description |
---|---|---|
bucketSize |
number | 对于geoHaystack索引,请指定用于分组位置值的单位数;即在同一存储桶中将彼此位于指定数量单位内的位置值分组。 |
该值必须大于 0.
Behaviors
createIndexes()方法具有以下行为。
Warning
前景索引构建会阻止数据库上的所有其他操作。
- 在版本 3.4 中更改。
要添加或更改排序规则以外的索引选项,必须使用dropIndex()方法删除索引,并使用新选项执行另一个db.collection.createIndexes()操作。
如果您创建具有一组选项的索引,然后在不先删除索引的情况下使用相同的索引字段和不同的选项(不包括排序规则)发出db.collection.createIndexes()方法,则db.collection.createIndexes() 不会用新选项重建现有索引。
与其他索引选项不同,您可以在具有不同排序规则的同一键上创建多个索引。要创建具有相同键模式但归类不同的索引,必须提供唯一的索引名称。
如果您使用相同的索引规范多次调用db.collection.createIndexes(),则只有第一个操作将成功。所有其他操作均无效。
如果现有文档的索引条目超过
Maximum Index Key Length
,MongoDB 将“不”在集合上创建索引。 MongoDB 的早期版本将创建索引,但不会为此类文档构建索引。
Example
See also
db.collection.createIndex()获取各种索引规范的示例。
创建不带选项的索引
考虑一个restaurants
集合,其中包含类似于以下内容的文档:
{
location: {
type: "Point",
coordinates: [-73.856077, 40.848447]
},
name: "Morris Park Bake Shop",
cuisine: "Cafe",
borough: "Bronx",
}
下面的示例在restaurants
集合上创建两个索引:在borough
字段上的升序索引和在location
字段上的2dsphere索引。
db.restaurants.createIndexes([{"borough": 1}, {"location": "2dsphere"}])
创建指定排序规则的索引
下面的示例在products
集合上创建两个索引:manufacturer
字段上的升序索引和category
字段上的升序索引。这两个索引都使用collation来指定语言环境fr
和比较强度2
:
db.products.createIndexes( [ { "manufacturer": 1}, { "category": 1 } ],
{ collation: { locale: "fr", strength: 2 } })
对于使用相同归类规则的索引键的查询或排序操作,MongoDB 可以使用索引。有关详细信息,请参见整理和索引使用。
Additional Information
有关索引的其他信息,请参考:
本手册的Indexes部分提供了 MongoDB 中索引和索引的完整文档。
db.collection.getIndexes()查看集合的现有索引的规范。
Text Indexes有关创建
text
索引的详细信息。Geospatial Indexes和geoHaystack Indexes用于地理空间查询。
TTL Indexes用于数据过期。