MongoDB 索引教程 – createIndex()、dropindex() 示例

索引在任何数据库中都非常重要,并且 MongoDB 没什么不同。使用索引,在 MongoDB 变得更有效率。

如果你有一个包含数千个没有索引的文档的集合,然后你查询以查找某些文档,那么在这种情况下 MongoDB 需要扫描整个集合才能找到文档。但如果你有索引, MongoDB 将使用这些索引来限制必须在集合中搜索的文档数量。

索引是特殊的数据集,用于存储集合数据的一部分。由于数据是部分数据,因此读取这些数据会变得更加容易。该部分集合存储特定字段的值或按字段值排序的一组字段的值。

了解索引的影响

现在,尽管从介绍中我们已经看到索引对于查询有好处,但是太多的索引会减慢其他操作,例如插入、删除和更新操作。

如果对文档频繁进行插入、删除和更新操作,那么索引就需要经常更改,这只会增加集合的开销。

以下示例展示了哪些字段值可以构成集合中的索引。索引可以仅基于集合中的一个字段,也可以基于集合中的多个字段。

在下面的例子中,Employeeid“1”和EmployeeCode“AA”用于索引集合中的文档。因此,当进行查询搜索时,这些索引将用于快速高效地在集合中找到所需的文档。

因此,即使搜索查询基于 EmployeeCode“AA”,也会返回该文档。

了解索引的影响

如何创建索引:createIndex()

在中创建索引 MongoDB 通过使用“创建索引“ 方法。

以下示例显示如何向集合添加索引。假设我们有相同的员工集合,其字段名称为“Employeeid”和“EmployeeName”。

创建索引:createIndex()

db.Employee.createIndex({Employeeid:1})

代码说明:

  1. - 创建索引 方法用于根据文档的“Employeeid”创建索引。
  2. '1' 参数表示当使用“Employeeid”字段值创建索引时,它们应按升序排序。请注意,这与 _id 字段(id 字段用于唯一标识集合中的每个文档)不同,后者由以下方式在集合中自动创建: MongoDB。现在将根据 Employeeid 而不是 _id 字段对文档进行排序。

如果命令执行成功,将显示以下输出:

输出:

创建索引:createIndex()

  1. numIndexesBefore: 1 表示在运行命令之前索引中存在的字段值(集合中的实际字段)的数量。请记住,每个集合都有 _id 字段,该字段也算作索引的字段值。由于 _id 索引字段是集合最初创建时的一部分,因此 numIndexesBefore 的值为 1。
  2. numIndexesAfter:2 表示运行命令后索引中存在的字段值的数量。
  3. 这里的“ok: 1”输出表明操作成功,新索引被添加到集合中。

上面的代码显示了如何基于一个字段值创建索引,但也可以基于多个字段值创建索引。

下面的例子显示了如何做到这一点;

创建索引:createIndex()

db.Employee.createIndex({Employeeid:1, EmployeeName:1])

代码说明:

  • createIndex 方法现在考虑了多个字段值,这将导致基于“Employeeid”和“EmployeeName”创建索引。Employeeid:1 和 EmployeeName:1 表示应在这两个字段值上创建索引,而 :2 表示应按升序排列。

如何查找索引:getindexes()

查找索引 MongoDB 通过使用 “获取索引” 方法。

下面的例子显示了如何做到这一点;

查找索引:getindexes()

db.Employee.getIndexes()

代码说明:

  • getIndexes 方法用于查找集合中的所有索引。

如果命令执行成功,将显示以下输出:

输出:

查找索引:getindexes()

  • 输出返回一个文档,该文档仅显示集合中有 2 个索引,一个是 _id 字段,另一个是 Employee id 字段。:1 表示索引中的字段值按升序创建。

如何删除索引:dropindex()

删除索引 MongoDB 是通过使用 dropIndex 方法完成的。

下面的例子显示了如何做到这一点;

删除索引:dropindex()

db.Employee.dropIndex(Employeeid:1)

代码说明:

  • dropIndex 方法采用需要从索引中删除的必需字段值。

如果命令执行成功,将显示以下输出:

输出:

删除索引:dropindex()

  1. nIndexesWas: 3 表示在运行命令之前索引中存在的字段值的数量。请记住,每个集合都有 _id 字段,该字段也算作索引的字段值。
  2. ok: 1 输出指定操作成功,并且“Employeeid”字段从索引中删除。

要一次删除集合中的所有索引,可以使用 dropIndexes 命令。

以下示例显示了如何做到这一点。

删除索引:dropindex()

db.Employee.dropIndex()

代码说明:

  • dropIndexes 方法将删除除 _id 索引之外的所有索引。

如果命令执行成功,将显示以下输出:

输出:

删除索引:dropindex()

  1. nIndexesWas:2 表示运行命令之前索引中存在的字段值的数量。
  2. 再次记住,每个集合都有 _id 字段,该字段也算作索引的字段值,并且不会被删除 MongoDB 这正是这条信息所表明的。
  3. ok: 1 输出表明操作成功。

总结

  • 定义索引对于更快、更有效地搜索集合中的文档非常重要。
  • 可以使用 createIndex 方法创建索引。可以针对一个字段或多个字段值创建索引。
  • 可以使用 getIndexes 方法找到索引。
  • 可以使用 dropIndex 删除单个索引或使用 dropIndexes 删除所有索引。