索引支持在MongoDB中高效执行查询。 要在一个或多个字段上创建索引,请将索引规范文档传递给 MongoCollection.createIndex()方法。
Scala 驱动程序提供 索引 构建者 类,其中包括静态工厂方法,用于为各种 MongoDB 索引键类型创建索引规范文档。要学习;了解有关索引类型的更多信息,请参阅服务器手册中的索引。
注意
仅当尚不存在相同规范的索引时, MongoDB才会创建索引。
先决条件
您必须在程序中包含以下 import 语句才能运行本指南中的代码示例:
import org.mongodb.scala._ import org.mongodb.Indexes import org.mongodb.IndexOptions import org.mongodb.Filters 
注意
本指南使用快速入门入门知识中介绍的Observable隐式。
连接到 MongoDB 部署
首先,连接到 MongoDB 部署,然后声明并定义MongoDatabase和MongoCollection实例。
以下代码连接到在端口27017上的localhost上运行的独立 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() 
Text Indexes
MongoDB提供文本索引来支持Atlas Search string内容的文本 。文本索引可以包括值为string或string元素数组的任何字段。 要创建文本索引规范,请使用Indexes.text()辅助方法。
以下示例在 name 字段上创建一个文本索引:
collection.createIndex(Indexes.text("name"))           .printResults() 
要了解有关文本索引的更多信息,请参阅服务器手册中的文本索引。
哈希索引
要为哈希索引创建规范,请使用Indexes.hashed()静态辅助方法。
以下示例在_id字段上创建哈希索引:
collection.createIndex(Indexes.hashed("_id"))           .printResults() 
要学习;了解有关哈希索引的更多信息,请参阅服务器手册中的哈希索引。
地理空间索引
为了支持地理空间查询, MongoDB支持各种地理空间索引。 要学习;了解有关地理空间索引的更多信息,请参阅服务器手册中的地理空间索引。
2dsphere
要为2dsphere索引创建规范,请使用Indexes.geo2dsphere()静态辅助方法。
以下示例在 contact.location 字段上创建一个 2dsphere 索引:
collection.createIndex(Indexes.geo2dsphere("contact.location"))           .printResults() 
索引选项
除了索引规范文档之外,createIndex() 方法还可以采用索引选项文档来指示驱动程序创建唯一索引或部分索引。
驱动程序提供IndexOptions类来指定各种索引选项。
将以下 import声明添加到代码中以创建IndexOptions实例。
import org.mongodb.scala.model.IndexOptions 
唯一索引
以下代码指定unique(true)选项以在name和stars字段上创建唯一索引:
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() 
要学习;了解其他索引选项,请参阅服务器手册中的索引属性。