Docs 菜单
Docs 主页
/ / /
Scala
/

创建索引

在此页面上

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

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

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

注意

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

您必须在程序中包含以下 import 语句才能运行本指南中的代码示例:

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

注意

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

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

以下代码连接到在端口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()

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索引创建规范,请使用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()

要了解有关唯一索引的更多信息,请参阅 MongoDB Server手册中的 唯一索引 。

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

以下示例对status字段的值为"A"的文档创建部分索引。

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

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

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

collection.listIndexes().printResults()

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

后退

数据库和集合