Multikey Indexes
Overview
多键索引可提高对数组值字段的查询性能。您可以使用createIndex()
方法和与创建 单字段索引相同的语法在集合上创建多键索引。
创建多键索引时,必须指定以下详细信息:
要在其上创建索引的字段
每个字段的排序顺序(升序或降序)
样本数据
本指南中的示例使用movies
sample_mflix
Atlas示例数据集的 数据库中的 集合。要从Scala应用程序访问权限此集合,请创建一个连接到AtlasMongoClient
集群的database
,然后为 和collection
变量分配以下值:
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()
方法创建多键索引。以下示例在 cast
字段上按升序创建索引:
val index = Indexes.ascending("cast") val observable = collection.createIndex(index) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
您可以通过调用 listIndexes()
方法验证索引是否已创建。您应该会在列表中看到 cast
的索引,如以下输出所示:
collection.listIndexes().subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"v": 2, "key": {"cast": 1}, "name": "cast_1"}
以下是在 cast
字段上创建的索引涵盖的查询示例:
val filter = and(equal("cast", "Aamir Khan"), equal("cast", "Kajol")) collection.find(filter).first().subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id":...,"title":"Fanaa",...,"cast": ["Aamir Khan", "Kajol", "Rishi Kapoor", "Tabu"],...}
更多信息
要学习;了解有关多键索引的更多信息,请参阅MongoDB Server手册中的多键索引。
要查看演示如何管理索引的可运行示例,请参阅使用索引优化查询。
API 文档
要进一步了解本指南所讨论的任何方法,请参阅以下 API 文档: