MongoDB教程:索引createIndex与dropindex

本文介绍了MongoDB中索引的重要性,展示了如何创建、查找和删除索引以提高查询效率。重点讲解了createIndex方法、getIndexes方法以及dropIndex的用法,包括单个字段索引和多字段索引的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

我们将学习——

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

索引的影响

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

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

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

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

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

img

如何创建索引:createIndex

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

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

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

img

代码解释:

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

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

img

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

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

以下示例显示了如何基于多个字段值创建索引:

img

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

代码解释:

createIndex方法传入多个字段值,表示根据“ Employeeid”和“ EmployeeName”创建索引。Employeeid:1EmployeeName:1指示应在这2个字段值上创建索引,而:1则指示索引应按升序排列。

如何查找索引:getindexes

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

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

img

db.Employee.getIndexes()

代码解释:

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

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

img

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

如何删除索引:dropindex

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

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

img

db.Employee.dropIndex(Employeeid:1)

代码解释:

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

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

img

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

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

下面的例子显示了如何一次删除集合中的所有索引:

img

db.Employee.dropIndex()

代码解释:

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

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

img

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

总结

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

links:

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

https://mongoing.com/archives/docs/mongodb%e5%88%9d%e5%ad%a6%e8%80%85%e6%95%99%e7%a8%8b/mongodb%e7%b4%a2%e5%bc%95-createindex%ef%bc%88%ef%bc%89%e4%b8%8edropindex%ef%bc%88%ef%bc%89

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值