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

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

MongoDB – db.collection.CreateIndex() 方法

在 MongoDB 中,索引是一种特殊的数据结构,用于存储与文档相关的一些信息,以便 MongoDB 可以轻松找到正确的数据文件。索引按索引中指定的字段的值排序。因此,MongoDB 提供了一个createIndex()方法来在集合上创建一个或多个索引。使用这种方法我们可以创建不同类型的索引,如文本索引、2dsphere 索引、2d 索引等。 它需要三个参数第一个是包含字段和值对的文档,其中字段是索引键,值描述了该字段的索引类型和其他类型是可选的。

  • 如果您正在创建一个已经存在的索引,那么 MongoDB 不会重新创建现有索引。
  • 您可以使用 hideIndex() 和 unhideIndex() 方法隐藏和取消隐藏索引。

句法:

参数:

  • 第一个参数是包含字段和值对的文档,其中字段是索引键,值描述该字段的索引类型。对于字段的升序索引,指定值 1,对于降序索引,指定值 -1。
  • 其他是可选的。

可选参数:

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

选项:

在 createIndex() 方法中,选项文档包含一组控制索引创建的选项。除非另有说明,否则以下选项可用于所有索引类型,并且这些选项是可选的:

  • background:这个参数的类型是boolean,background:true指示MongoDB在后台建立索引。后台构建不会阻止对集合的操作。如果指定,MongoDB 将忽略后台选项。
  • unique:这个参数的类型是boolean,指定true来创建唯一索引。默认值为假。它创建一个唯一索引,以便集合不会接受索引键值与索引中现有值匹配的文档的插入或更新。
  • name:它是索引的名称。此参数的类型是字符串。如果未指定,MongoDB 通过连接索引字段的名称和排序顺序来生成索引名称。
  • partialFilterExpression:这个参数的类型是一个文档。如果指定,则索引仅引用与过滤器表达式匹配的文档。
  • sparse:这个参数的类型是boolean。如果为真,则索引仅引用具有指定字段的文档。默认值为假。
  • expireAfterSeconds:该参数的类型为整数。它指定一个值,以秒为单位作为 TTL 来控制 MongoDB 在此集合中保留文档的时间。
  • hiddedn:这个参数的类型是boolean。它是一个标志,用于确定索引是否对查询规划器隐藏。因为隐藏索引不会作为查询计划选择的一部分进行评估。该参数的默认值为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.student.createIndex({name:1})

在这里,我们在没有选项的单个字段(即名称)上创建一个升序索引。



  • 在单个字段语言上创建一个降序索引:
db.student.createIndex({language:-1})

在这里,我们在单个字段(即语言)上创建一个降序索引。

  • 在多个字段上创建索引:
db.student.createIndex({name:1,language:-1})

在这里,我们使用 createIndex() 方法在多个字段上创建索引(即名称上的升序索引和语言字段上的降序索引)。

  • 使用选项创建唯一索引:
db.student.createIndex({name:1},{unique:true})

在这里,我们正在创建一个唯一索引,以便集合不会接受索引键值与索引中现有值匹配的文档的插入或更新。

  • 在单个字段路径上创建通配符索引:

首先,我们在包含分支字段的学生集合中再插入一个文档。

现在我们在单个字段路径上创建通配符索引:

db.student.createIndex({"branch.$**":1})

在这里,我们使用 createIndex() 方法在分支字段上创建通配符索引。