📜  MongoDB – db.collection.createIndexes() 方法

📅  最后修改于: 2022-05-13 01:56:58.178000             🧑  作者: Mango

MongoDB – db.collection.createIndexes() 方法

createIndexes()方法在指定的集合上创建一个或多个索引。它用于根据文档的字段创建一个或多个索引。使用这种方法我们可以创建不同类型的索引,如文本索引、2dsphere 索引、2d 索引等。 它需要三个参数第一个是包含字段和值对的文档,其中字段是索引键,值描述该字段的索引类型,其他是可选的。

  • 如果索引已创建或存在,则此方法不会重新创建现有索引。
  • 您可以使用 hideIndex() 和 unhideIndex() 方法隐藏和取消隐藏索引。

句法:

参数:

  • 第一个参数是一个或多个文档的数组,其中包含字段和值对,其中字段是索引键,值描述该字段的索引类型。或者换句话说,这个参数是一个包含索引规范文档的数组,每个文档都包含字段和值对,其中字段是索引键,值描述了该字段的索引类型。对于字段的升序索引,指定值 1,对于降序索引,指定值 -1。
  • 其他是可选的。

可选参数:

  • 选项:它是一组控制索引创建的选项。该参数的类型是文档。
  • commitQuorum:它是承载数据的投票副本集成员的最小数量。

选项:

选项文档中有一组控制索引创建的选项。不同的索引类型可以有特定于该类型的附加选项。以下选项可用:

  • 背景:此选项的类型是布尔值。 此选项取值为 true 或 false 如果为 true,则它会指示 MongoDB 在后台构建索引。此选项的默认值为 false。后台构建不会阻止对集合的操作。
  • 唯一:此选项的类型是布尔值。它指定对 keyPatterns 数组中列出的每个索引使用唯一索引。特定索引不接受索引键值引用索引中现有值的文档的插入或修改。要创建唯一索引,请将值设置为 true。默认值为假。
  • name:此选项的类型是字符串。它需要一个字符串作为索引的名称。如果未指定,则 MongoDB 通过连接索引字段的名称和排序顺序来创建名称。
  • partialFilterExpression:这个选项的类型是文档。如果指定,则索引仅引用与查询表达式匹配的文档。
  • 稀疏:此选项的类型是布尔值。此选项的默认值为 false。如果我们将其值设置为 true,则索引仅引用具有指定字段的文档。
  • expireAfterSeconds:这个选项的类型是一个整数。它指定一个值来监视 MongoDB 在此集合中保存文档的时间(以秒为单位)。
  • hidden:这个选项的类型是布尔值。此选项的默认值为 false。一个标志,指定查询规划器中的索引是否隐藏。作为查询计划选择的一部分,不评估隐藏索引。
  • storageEngine:这个选项的类型是文档。它允许用户为创建的索引配置存储引擎。

某些索引可能具有仅为该类型指定的其他选项,例如:

对于文本索引:



所有这些参数都是可选的:

  • weights :它是文档类型,包含文本索引的字段和权重对。该参数的默认值为 1。
  • default_language:字符串类型,指定决定停用词列表的语言以及词干分析器和分词器的规则。
  • language_override:它是字符串类型,指定文档中包含文档覆盖语言的字段的名称。
  • textIndexVersion:整数类型,指定文本索引版本号。

对于 2dsphere 索引:

2dsphereIndexVersion:整数类型,指定2dsphere索引版本号。它是一个可选参数。

对于二维索引:

所有这些参数都是可选的:

  • bits:整数类型,指定存储的位置数据geohash值的精度数。该参数的默认值为 26。
  • min:数字类型,指定经纬度值的下界。该参数的默认值为 -180.0。
  • max:数字类型,指定经度和纬度值的较高包含边界。该参数的默认值为 -180.0。

对于 geoHaystack 索引:

bucketSize:它是数字类型,指定对本地值进行分组的单位数。该参数的值必须大于 0。

对于通配符索引:

wildcardProjection:它是文档类型,允许用户在通配符索引中包含或排除特定的字段路径。它仅在您创建通配符索引时有效。它是一个可选参数。

例子:



在以下示例中,我们正在使用:

  • 在单个字段名称上创建一个升序索引:
db.employee.createIndexes([{name:1}])

在这里,我们按升序在 name 字段上创建索引。

  • 在单个字段名称上创建一个降序索引:
db.employee.createIndexes([{name:-1}])

在这里,我们按降序在 name 字段上创建索引。

  • 在多个字段上创建索引:名称的升序索引和语言的降序索引:
db.employee.createIndexes([{name:1,department:-1}]

在这里,我们在多个字段上创建索引,即名称字段的升序索引和部门字段的降序索引。

  • 在 joinYear 字段上创建升序唯一索引:
db.employee.createIndexes([{joinYear:1}],{unique:true})

在这里,我们通过将 unique 参数的值设置为 true 来在 joinYear 字段上创建升序唯一索引。

  • 在 joinYear 字段上创建降序稀疏索引:
db.employee.createIndexes([{joinYear:-1}],{sparse:true})

在这里,我们通过将 sparse 参数的值设置为 true 来在 joinYear 字段上创建降序稀疏索引。

  • 在名称字段上创建通配符索引:
db.employee.createIndexes([{"name.$**":1}])