Docs 菜单
Docs 主页
/ / /
Java Reactive Streams 驱动程序
/

创建索引

在此页面上

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

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

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

注意

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

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

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实例。

以下代码连接到在端口27017上的localhost上运行的独立 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提供文本索引来支持Atlas Search string内容的文本 。文本索引可以包括值为string或string元素数组的任何字段。 要创建文本索引规范,请使用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());

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

后退

数据库和集合

来年

读取操作