索引在任何数据库中都非常重要,对于MongoDB也是一样,索引并没有什么不同。使用索引,在MongoDB中执行查询变得更加高效。
如果有一个包含成千上万个没有索引的文档的集合,查询出某些文档,在这种情况下,MongoDB将需要扫描整个集合以找到这些文档。但是,如果有索引,MongoDB将使用这些索引来限制必须在集合中搜索的文档数。
索引是特殊数据集,用于存储集合数据的一部分。由于数据是部分数据,因此读取该数据变得更加容易。此部分集存储特定字段的值或按字段值排序的一组字段。
我们将学习–
- 了解索引的影响
- 如何创建索引:createIndex()
- 如何查找索引:getindexes()
- 如何删除索引:dropindex()
索引的影响
从介绍中我们已经看到索引对于查询而言是很好的,但是索引太多会减慢其他操作,例如插入,删除和更新操作。
如果频繁对文档执行插入,删除和更新操作,则索引将需要经常更改,这只是集合的开销。
下面的例子表明,其中哪些字段值可以构成集合中的索引。索引可以仅基于集合中的一个字段,也可以基于集合中的多个字段。
在下面的示例中,Employeeid“ 1”和EmployeeCode“ AA”用于索引集合中的文档。因此,当进行查询搜索时,这些索引将用于快速有效地查找集合中所需的文档。
因此,即使搜索查询基于EmployeeCode“ AA”,也将返回该文档。
如何创建索引:createIndex()
通过使用“ createIndex ”方法在MongoDB中创建索引。
以下示例显示如何向集合添加索引。假设我们有相同的Employee集合,其字段名称为“ Employeeid”和“ EmployeeName”。
db.Employee.createIndex({Employeeid:1})
代码解释:
- 所述的createIndex方法用于创建基于文档的“Employeeid”的索引。
- 参数“ 1”表示使用“ Employeeid”字段值创建索引时,应按升序对其进行排序。请注意,这与_id字段(ID字段用于唯一标识集合中的每个文档)不同,后者由MongoDB在集合中自动创建。现在,将按照Employeeid而不是_id字段对文档进行排序。
命令执行成功,将显示以下结果:
- numIndexesBefore:1表示运行命令之前索引中存在的字段值(集合中的实际字段)的数量。请记住,每个集合都有_id字段,该字段也算作索引的Field值。由于_id索引字段在最初创建时是集合的一部分,因此numIndexesBefore的值为1。
- numIndexesAfter:2表示运行命令后索引中存在的字段值的数目。
- 此处的“ ok:1”输出指定操作已成功,并且新索引已添加到集合中。
上面的代码显示了如何基于一个字段值创建索引,但是也可以基于多个字段值创建索引。
以下示例显示了如何完成此操作:
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
代码解释:
- 现在,createIndex方法考虑多个字段值,这些值现在将导致根据“ Employeeid”和“ EmployeeName”创建索引。Employeeid:1和EmployeeName:1指示应在这2个字段值上创建索引,而:1则指示索引应按升序排列。
如何查找索引:getindexes()
通过使用“ getIndexes”方法在MongoDB中查找索引。
下面的例子如何完成此操作:
db.Employee.getIndexes()
代码解释:
- getIndexes方法用于查找集合中的所有索引。
命令执行成功,将显示以下结果:
- 输出返回一个文档,该文档仅显示集合中有2个索引,即_id字段,另一个是Employee id字段。:1表示索引中的字段值是按升序创建的。
如何删除索引:dropindex()
通过使用dropIndex方法在MongoDB中删除索引。
以下示例显示了如何完成此操作:
db.Employee.dropIndex(Employeeid:1)
代码解释:
- dropIndex方法采用必需的字段值,该值需要从索引中删除。
命令执行成功,将显示以下输出结果:
- nIndexesWas:3表示在运行命令之前索引中存在的字段值的数目。请记住,每个集合都有_id字段,该字段也算作索引的Field值。
- ok:1输出指定该操作成功,并且从索引中删除了“ Employeeid”字段。
要一次删除集合中的所有索引,可以使用dropIndexes命令。
下面的例子显示了如何完成此操作。
db.Employee.dropIndex()
代码解释:
- dropIndexes方法将删除除_id索引以外的所有索引。
命令执行成功,将显示以下结果:
- nIndexesWas:2表示在运行命令之前索引中存在的字段值的数量。
- 再次记住,每个集合都有_id字段,该字段也算作索引的Field值,并且不会被MongoDB删除,这就是此消息所指示的内容。
- ok:1输出指定操作成功。
总结
- 定义索引对于快速高效地搜索集合中的文档非常重要。
- 可以使用createIndex方法创建索引。可以仅在一个字段或多个字段值上创建索引。
- 可以使用getIndexes方法找到索引。
- 可以通过将dropIndex用于单个索引或将dropIndex用于删除所有索引来删除索引。
译者:徐扬
源地址:https://www.guru99.com/working-mongodb-indexes.html
评论前必须登录!
注册