文档菜单
文档首页
/ / /
Java 反应式流驱动程序
/

创建索引

在本页

  • 先决条件
  • 连接到 MongoDB 部署
  • 升序索引
  • 降序索引
  • 组合索引
  • 文本索引
  • 哈希索引
  • 地理空间索引
  • 索引选项
  • 获取集合上的索引列表

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

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

注意

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

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

import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoDatabase;
import com.mongodb.reactivestreams.client.MongoCollection;
import org.bson.Document;
import com.mongodb.client.model.Indexes;
import com.mongodb.client.model.IndexOptions;
import com.mongodb.client.model.Filters;

重要

本指南使用 Subscriber 实现,这些实现在本指南中进行了描述快速入门指南.

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

以下代码连接到在 localhost 的端口 27017 上运行的独立 MongoDB 部署。然后,定义 database 变量以引用 test 数据库,定义 collection 变量以引用 restaurants 集合

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

要了解有关连接到 MongoDB 部署的更多信息,请参阅连接到 MongoDB 指南。

要创建升序索引的规范,请使用 Indexes.ascending() 静态辅助方法。

以下示例在 name 字段上创建一个升序索引

collection.createIndex(Indexes.ascending("name"))
.subscribe(new PrintToStringSubscriber<String>());

以下示例在 stars 字段和 name 字段上创建一个组合升序索引

collection.createIndex(Indexes.ascending("stars", "name"))
.subscribe(new PrintToStringSubscriber<String>());

要查看创建组合索引的另一种方法,请参阅组合索引部分。

要创建一个降序索引的规范,请使用 Indexes.descending() 静态辅助方法。

以下示例在stars字段上创建一个降序索引

collection.createIndex(Indexes.descending("stars"))
.subscribe(new PrintToStringSubscriber<String>());

以下示例在stars字段和name字段上创建一个降序组合索引

collection.createIndex(Indexes.descending("stars", "name"))
.subscribe(new PrintToStringSubscriber<String>());

要查看创建组合索引的另一种方法,请参阅组合索引部分。

要创建一个组合索引的规范,请使用Indexes.compoundIndex()静态辅助方法。

注意

要创建一个所有键都是升序的组合索引规范,可以使用ascending()方法。要创建一个所有键都是降序的组合索引规范,可以使用descending()方法。

以下示例在stars字段上创建一个降序索引,并在name字段上创建一个升序索引

collection.createIndex(
Indexes.compoundIndex(Indexes.descending("stars"),
Indexes.ascending("name"))
).subscribe(new PrintToStringSubscriber<String>());

MongoDB提供了文本索引来支持对字符串内容的文本搜索。文本索引可以包括任何值为字符串或字符串元素数组的字段。要创建文本索引的规范,请使用Indexes.text()静态辅助方法。

以下示例在name字段上创建文本索引

collection.createIndex(Indexes.text("name"))
.subscribe(new PrintToStringSubscriber<String>());

要创建哈希索引的规范,请使用Indexes.hashed()静态辅助方法。

以下示例在_id字段上创建哈希索引

collection.createIndex(Indexes.hashed("_id"))
.subscribe(new PrintToStringSubscriber<String>());

为了支持地理空间查询,MongoDB支持各种地理空间索引。

要创建一个 2dsphere 索引的规范,请使用 Indexes.geo2dsphere() 静态辅助方法。

以下示例在 contact.location 字段上创建一个 2dsphere 索引

collection.createIndex(Indexes.geo2dsphere("contact.location"))
.subscribe(new PrintToStringSubscriber<String>());

除了索引规范文档之外,createIndex() 方法还可以接受一个索引选项文档,该文档指导驱动程序创建唯一索引或部分索引。

驱动程序提供了 IndexOptions 类来指定各种索引选项。

将以下导入语句添加到您的代码中,以创建一个 IndexOptions 实例。

import com.mongodb.client.model.IndexOptions;

以下代码指定了 unique(true) 选项,在 namestars 字段上创建唯一索引

IndexOptions indexOptions = new IndexOptions().unique(true);
collection.createIndex(Indexes.ascending("name", "stars"), indexOptions)
.subscribe(new PrintToStringSubscriber<String>());

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

以下示例创建了一个部分索引,用于具有 status 字段值为 "A" 的文档。

IndexOptions partialFilterIndexOptions = new IndexOptions()
.partialFilterExpression(Filters.exists("contact.email"));
collection.createIndex(
Indexes.descending("name", "stars"), partialFilterIndexOptions)
.subscribe(new PrintToStringSubscriber<String>());

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

collection.listIndexes().subscribe(new PrintDocumentSubscriber());

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

返回

数据库和集合