文档菜单
文档首页
/ / /
Scala
/

创建索引

在本页

  • 先决条件
  • 连接到 MongoDB 部署
  • 升序索引
  • 单个升序索引
  • 复合升序索引
  • 降序索引
  • 单个降序键索引
  • 复合降序键索引
  • 复合索引
  • 文本索引
  • 哈希索引
  • 地理空间索引
  • 2dsphere
  • 索引选项
  • 唯一索引
  • 部分索引
  • 获取集合上的索引列表

索引支持 MongoDB 中查询的高效执行。要在字段或字段上创建索引,请将索引规范文档传递给MongoCollection.createIndex() 方法。

Scala 驱动程序提供索引 类,其中包括用于为各种 MongoDB 索引键类型创建索引规范文档的静态工厂方法。有关索引类型的信息,请参阅服务器手册中的索引

注意

MongoDB 仅在不存在相同规范的索引时才创建索引。

为了运行本指南中的代码示例,您必须在程序中包含以下导入语句

import org.mongodb.scala._
import org.mongodb.Indexes
import org.mongodb.IndexOptions
import org.mongodb.Filters

注意

本指南使用了在快速入门指南中介绍的 Observable 隐式。

首先,连接到 MongoDB 部署,然后声明和定义 MongoDatabaseMongoCollection 实例。

以下代码连接到在 localhost 的端口 27017 上运行的独立 MongoDB 部署。然后,它定义了 database 变量来引用 test 数据库,并将 collection 变量设置为引用 restaurants 集合

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

要了解更多关于连接到 MongoDB 部署的信息,请参阅连接到 MongoDB 教程。

要创建一个升序索引规范,请使用 Indexes.ascending() 静态辅助方法。

以下示例在 name 字段上创建一个升序索引

collection.createIndex(Indexes.ascending("name"))
.printResults()

以下示例在 stars 字段和 name 字段上创建一个升序复合索引

collection.createIndex(Indexes.ascending("stars", "name"))
.printResults()

要查看创建复合索引的另一种方法,请参阅复合索引部分。

要创建一个降序索引规范,请使用 Indexes.descending() 静态辅助方法。

以下示例在stars字段上创建了一个降序索引

collection.createIndex(Indexes.descending("stars"))
.printResults()

以下示例在stars字段和name字段上创建了一个复合降序索引

collection.createIndex(Indexes.descending("stars", "name"))
.printResults()

要查看创建复合索引的另一种方法,请参阅复合索引部分。

要为复合索引创建一个规范,请使用Indexes.compoundIndex()静态辅助方法。

注意

要为所有键都是升序的复合索引创建一个规范,可以使用ascending()方法。要为所有键都是降序的复合索引创建一个规范,可以使用descending()方法。

以下示例创建了一个在stars字段上降序和name字段上升序的复合索引

collection.createIndex(
Indexes.compoundIndex(Indexes.descending("stars"),
Indexes.ascending("name")))
.printResults()

MongoDB提供了文本索引以支持对字符串内容的文本搜索。文本索引可以包括任何值为字符串或字符串元素数组的字段。要为文本索引创建一个规范,请使用Indexes.text()辅助方法。

以下示例在 name 字段上创建文本索引

collection.createIndex(Indexes.text("name"))
.printResults()

要了解更多关于文本索引的信息,请参阅服务器手册中的文本索引

要创建哈希索引的规范,请使用Indexes.hashed()静态辅助方法。

以下示例在 _id 字段上创建哈希索引

collection.createIndex(Indexes.hashed("_id"))
.printResults()

要了解更多关于哈希索引的信息,请参阅服务器手册中的哈希索引

为了支持地理空间查询,MongoDB 支持各种地理空间索引。要了解更多关于地理空间索引的信息,请参阅服务器手册中的地理空间索引

要创建 2dsphere 索引的规范,请使用 Indexes.geo2dsphere() 静态辅助方法。

以下示例在contact.location字段上创建了一个2dsphere索引

collection.createIndex(Indexes.geo2dsphere("contact.location"))
.printResults()

除了索引规范文档之外,createIndex()方法还可以接受一个索引选项文档,该文档指导驱动程序创建唯一索引或部分索引。

驱动程序提供了一个IndexOptions类来指定各种索引选项。

将以下导入语句添加到您的代码中,以创建一个IndexOptions实例。

import org.mongodb.scala.model.IndexOptions

以下代码指定了unique(true)选项,以在namestars字段上创建唯一索引

val indexOptions = IndexOptions().unique(true)
collection.createIndex(Indexes.ascending("name", "stars"), indexOptions)
.printResults()

有关唯一索引的更多信息,请参阅服务器手册中的唯一索引

要创建部分索引,请包含partialFilterExpression索引选项。

以下示例创建了一个部分索引,该索引只包含status字段值为"A"的文档。

val partialFilterIndexOptions = IndexOptions()
.partialFilterExpression(Filters.exists("contact.email"))
collection.createIndex(
Indexes.descending("name", "stars"), partialFilterIndexOptions)
.printResults()

有关部分索引的更多信息,请参阅服务器手册中的部分索引

使用 listIndexes() 方法获取索引列表。以下代码列出了集合上的索引:

collection.listIndexes().printResults()

要了解其他索引选项,请参阅服务器手册中的索引属性

返回

数据库和集合