如何在 MongoDB 中创建索引:示例说明

与任何数据库一样,索引是 MongoDB 中必不可少的数据结构。它们促进了简单的数据库查询,让您可以在独特的字段中存储和排列您的收藏的一部分。索引还支持范围查询,没有任何障碍。

如果您的应用程序使用 MongoDB,您希望利用索引的强大功能使您的查询更快、更高效。那么什么是 MongoDB 中的索引,如何创建它们?

MongoDB 中的索引让您可以对文档中的某些字段进行优先级排序,并在稍后将它们转换为查询参数。创建集合时,MongoDB 会创建一个默认的 ID 索引。但是如果您有更高的查询或安排需求,您可以添加更多。

唯一索引还可以防止数据输入过程中出现重复。它们在拒绝数据库中已经存在的条目时派上用场。例如,您可以对用户名和电子邮件字段使用唯一索引。

索引可帮助您使用定义的查询格式按所需数量具体获取所需内容,而无需扫描整个集合。创建索引时,您可以指定每次查询数据时希望如何排序。

例如,如果您决定在不使用索引的情况下按数据点的输入日期对数据点进行排序,则通常需要提供查询条件和排序顺序。

假设您要按条目的降序日期排列高于某个数字的年龄。您的查询通常如下所示:

db.collectionName.find({age: {$gt: 50}}).sort({date: -1})

但是,如果您在输入日期上有索引,则只需提供查询条件。这是因为您在创建索引时已经对日期进行了降序排序。

在这种情况下,上述查询变为:

db.collectionName.find({age: {$gt: 50}})

您可以使用 MongoDB 的内置 shell 接口在 MongoDB 中创建索引。这就是我们将在本教程中使用的内容。

然而,索引并不是单独存在的。您必须先创建数据库和集合,然后才能创建索引。

正如我们之前提到的,索引的一个突出特点是它允许您在索引创建期间指定排序标准。

例如,以相反顺序排列年龄的索引如下所示:

db.userCollection.createIndex({age: -1})

代码中的负整数 ( -1 ) 告诉 MongoDB 在您使用年龄索引查询数据时以相反的顺序排列年龄。因此,您可能不需要在查询期间指定排序顺序,因为索引已经处理了。

要按升序创建同一字段的索引,请将-1替换为1

db.userCollection.createIndex({age: 1})

尽管 MongoDB 中还有其他索引类型,但这是创建单一和复合形式的方法——因为它们是最常用的。

但在我们继续之前,请确保您已在 PC 上设置了 MongoDB服务器。如果您已经这样做了,请打开 MongoDB shell 并继续。

MongoDB 中的单索引很简单。首先,选择一个已经包含集合的数据库。

假设我们的数据库名称是MUO

use MUO

选择数据库后,在 shell 中使用createIndex()命令创建单个索引。

例如,要在集合中创建单个用户名索引并使用它以相反的顺序进行查询:

db.collectionName.createIndex({username: -1})

多键索引可用于为复杂数据数组中的字段建立索引。例如,一个集合可能包含用户的复杂数据,他们的信息在另一个数组中。例如,说出姓名、身高和年龄。

您可以在该数组中的每个用户的高度上创建一个多键索引,如下所示:

db.customers.createIndex({user.height: 1})

上面代码中的高度用户字段的子集。

一个复合索引包含多个索引。要在客户集合上创建地址和产品类型的复合索引,例如:

db.customer.createIndex({address: 1, products: 1})

由于您在创建上述索引时没有提供名称,因此 MongoDB 会默认创建一个名称。但它用下划线分隔每个索引的名称。所以它的可读性较差,特别是如果您在一个复合中拥有两个以上的索引。

要在创建复合索引时指定名称:

db.customers.createIndex({location: 1, products: 1, weight: -1}, {name: "myCompundIndex"})

查看集合中的所有索引:

db.collectionName.getIndexes()

上面的代码输出命名集合中的所有索引。

MongoDB 中的索引减少了执行并发查询时的运行时延迟。此外,它们还可以帮助您组织数据库并使其更易于访问。正如您所见,毕竟在 MongoDB 中创建索引并不复杂。此处的示例足以让您开始创建索引。尽管如此,要在实践中查看索引,您需要知道 MongoDB 中的查询是如何工作的。

标签: Python 编程 数据库