创建索引
在本页
索引支持 MongoDB 中查询的高效执行。要在字段或字段上创建索引,请将索引规范文档传递给MongoCollection.createIndex()
方法。
Scala 驱动程序提供索引 类,其中包括用于为各种 MongoDB 索引键类型创建索引规范文档的静态工厂方法。有关索引类型的信息,请参阅服务器手册中的索引。
注意
MongoDB 仅在不存在相同规范的索引时才创建索引。
先决条件
为了运行本指南中的代码示例,您必须在程序中包含以下导入语句
import org.mongodb.scala._ import org.mongodb.Indexes import org.mongodb.IndexOptions import org.mongodb.Filters
注意
本指南使用了在快速入门指南中介绍的 Observable
隐式。
连接到 MongoDB 部署
首先,连接到 MongoDB 部署,然后声明和定义 MongoDatabase
和 MongoCollection
实例。
以下代码连接到在 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
要创建 2dsphere
索引的规范,请使用 Indexes.geo2dsphere()
静态辅助方法。
以下示例在contact.location
字段上创建了一个2dsphere
索引
collection.createIndex(Indexes.geo2dsphere("contact.location")) .printResults()
索引选项
除了索引规范文档之外,createIndex()
方法还可以接受一个索引选项文档,该文档指导驱动程序创建唯一索引或部分索引。
驱动程序提供了一个IndexOptions
类来指定各种索引选项。
将以下导入语句添加到您的代码中,以创建一个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()
要了解其他索引选项,请参阅服务器手册中的索引属性。