1. 主页
  2. 文档
  3. MongoDB初学者教程——7天学习MongoDB
  4. MongoDB索引-createIndex()与dropindex()

MongoDB索引-createIndex()与dropindex()

索引在任何数据库中都非常重要,对于MongoDB也是一样,索引并没有什么不同。使用索引,在MongoDB中执行查询变得更加高效。

如果有一个包含成千上万个没有索引的文档的集合,查询出某些文档,在这种情况下,MongoDB将需要扫描整个集合以找到这些文档。但是,如果有索引,MongoDB将使用这些索引来限制必须在集合中搜索的文档数。

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

我们将学习–

  • 了解索引的影响
  • 如何创建索引:createIndex()
  • 如何查找索引:getindexes()
  • 如何删除索引:dropindex()

 

索引的影响

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

如果频繁对文档执行插入,删除和更新操作,则索引将需要经常更改,这只是集合的开销。

下面的例子表明,其中哪些字段值可以构成集合中的索引。索引可以仅基于集合中的一个字段,也可以基于集合中的多个字段。

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

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

 

如何创建索引:createIndex()

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

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

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

代码解释:

  1. 所述createIndex方法用于创建基于文档的“Employeeid”的索引。
  2. 参数“ 1”表示使用“ Employeeid”字段值创建索引时,应按升序对其进行排序。请注意,这与_id字段(ID字段用于唯一标识集合中的每个文档)不同,后者由MongoDB在集合中自动创建。现在,将按照Employeeid而不是_id字段对文档进行排序。

命令执行成功,将显示以下结果:

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

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

以下示例显示了如何完成此操作:

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

代码解释:

  1. 现在,createIndex方法考虑多个字段值,这些值现在将导致根据“ Employeeid”和“ EmployeeName”创建索引。Employeeid:1和EmployeeName:1指示应在这2个字段值上创建索引,而:1则指示索引应按升序排列。

 

如何查找索引:getindexes()

通过使用“ getIndexes”方法在MongoDB中查找索引。

下面的例子如何完成此操作:

db.Employee.getIndexes()

 

代码解释:

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

命令执行成功,将显示以下结果:

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

 

如何删除索引:dropindex()

通过使用dropIndex方法在MongoDB中删除索引。

以下示例显示了如何完成此操作:

db.Employee.dropIndex(Employeeid:1)

代码解释:

  1. dropIndex方法采用必需的字段值,该值需要从索引中删除。

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

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

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

下面的例子显示了如何完成此操作。

db.Employee.dropIndex()

代码解释:

  1. dropIndexes方法将删除除_id索引以外的所有索引。

命令执行成功,将显示以下结果:

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

总结

  • 定义索引对于快速高效地搜索集合中的文档非常重要。
  • 可以使用createIndex方法创建索引。可以仅在一个字段或多个字段值上创建索引。
  • 可以使用getIndexes方法找到索引。
  • 可以通过将dropIndex用于单个索引或将dropIndex用于删除所有索引来删除索引。

 

译者:徐扬

源地址:https://www.guru99.com/working-mongodb-indexes.html

 

这篇文章对您有用吗? 2

我们要如何帮助您?

评论 抢沙发

评论前必须登录!