Docs 菜单
Docs 主页
/ / /
Scala
/

复合索引

在此页面上

  • Overview
  • 样本数据
  • 创建复合索引
  • 更多信息
  • API 文档

复合索引保存对集合文档中多个字段的引用,从而提高查询和排序性能。

创建复合索引时,必须指定以下详细信息:

  • 要在其上创建索引的字段

  • 每个字段的排序顺序(升序或降序)

本指南中的示例使用movies sample_mflixAtlas示例数据集的 数据库中的 集合。要从Scala应用程序访问权限此集合,请创建一个连接到AtlasMongoClient 集群的 ,并将以下值分配给databasecollection 变量:

val database: MongoDatabase = mongoClient.getDatabase("sample_mflix")
val collection: MongoCollection[Document] = database.getCollection("movies")

要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。

要运行本指南中的示例,必须在文件中包含以下 import 语句:

import org.mongodb.scala._
import org.mongodb.scala.model.Indexes
import org.mongodb.scala.model.IndexOptions._
import org.mongodb.scala.model.Filters._
import scala.concurrent.Await
import scala.concurrent.duration._
import scala.util.{Failure, Success}
import java.util.concurrent.TimeUnit

使用 createIndex() 方法创建复合索引。以下示例按降序对 runtime字段创建索引,并按升序对 year字段创建索引:

val index = Indexes.compoundIndex(Indexes.descending("runtime"),
Indexes.ascending("year"))
val observable = collection.createIndex(index)
Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))

您可以使用 listIndexes() 方法验证索引是否已创建。您应该在列表中看到 runtimeyear 的索引,如以下输出所示:

collection.listIndexes().subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"v": 2, "key": {"runtime": -1, "year": 1}, "name": "runtime_-1_year_1"}

以下是在 runtimeyear 字段上创建的索引涵盖的查询示例:

val filter = and(gt("runtime", 80), gt("year", 1999))
collection.find(filter).first().subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id":...,"runtime": 98,...,"title": "In the Mood for Love",...,"year": 2000,...}

要学习;了解有关复合索引的更多信息,请参阅MongoDB Server手册中的复合索引

要查看演示如何管理索引的可运行示例,请参阅 通过使用索引优化查询。

要进一步了解本指南所讨论的任何方法,请参阅以下 API 文档:

后退

单个字段