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

Retrieve Data

在此页面上

  • Overview
  • 样本数据
  • 查找文档
  • 查找一个文档
  • 查找多个文档
  • 修改查找行为
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何使用MongoDB Java Reactive Streams 驱动程序通过读取操作从MongoDB集合中检索数据。

本指南中的示例使用 Atlas示例数据集中 sample_restaurants.restaurants集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅入门。

重要

项目 Reactor 库

本指南使用 Project ReactorPublisher 库来使用Java Reactive Streams驾驶员方法返回的 实例。要学习;了解有关 Project Reactor 库及其使用方法的更多信息,请参阅 Reactor 文档中的“入门” 。要进一步学习;了解如何使用本指南中的 Project Reactor 库方法,请参阅“将数据写入MongoDB ”指南。

Java Reactive Streams驾驶员包含一种从集合中检索文档的方法: find()

此方法采用查询过滤并返回一个或多个匹配的文档。 查询过滤是一个对象,用于指定要在查询中检索的文档。

如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。

要查找集合中的单个文档,请将first()方法链接到find()方法调用,并将查询过滤传递给指定要查找的文档条件的find()方法调用。 如果有多个文档与查询过滤匹配,则find().first()构造会从检索到的结果中返回第一个匹配的文档。 如果没有文档与查询过滤匹配,则该构造返回None

提示

当您知道只有一个匹配文档或者您只对第一个匹配项感兴趣时, find().first()构造非常有用。

以下示例使用find().first()构造查找"cuisine"字段值为"Bakery"的第一个文档:

Publisher<Document> findDocPublisher = restaurants.find(
eq("cuisine", "Bakery")).first();
Mono.from(findDocPublisher)
.doOnNext(System.out::println)
.blockLast();

提示

排序顺序

如果不指定排序顺序, find().first()构造将按自然顺序返回磁盘上的第一个文档。

要学习;了解有关排序的更多信息,请参阅《指定要返回的文档》指南。

要查找集合中的多个文档,请将查询筛选器传递给 find() 方法,其中指定要检索的文档条件。

以下示例使用find()方法查找"cuisine"字段值为"Spanish"的所有文档:

FindPublisher<Document> findDocPublisher = restaurants.find(
eq("cuisine", "Spanish"));
Flux.from(findDocPublisher)
.doOnNext(System.out::println)
.blockLast();

注意

查找所有文档

要查找集合中的所有文档,请不要向find()方法传递任何参数:

Publisher<Document> findAllPublisher = restaurants.find();
Flux.from(findAllPublisher)
.doOnNext(System.out::println)
.blockLast();

您可以通过将其他方法链接到find()方法来修改该方法的行为。 下表描述了常用的方法:

Argument
说明
batchSize(int batchSize)
Limits the number of documents to hold in a cursor at a given time. To learn more about cursors, see cursor in the MongoDB Server documentation.
collation(Collation collation)
Sets the collation options as an instance of the Collation class.
comment(String comment)
Attaches a string to the query. This can help you trace and interpret the operation in the server logs and in profile data. To learn more about query comments, see the $comment page.
hint(Bson hint)
Gets or sets the index to scan for documents. For more information, see the hint statement in the MongoDB Server manual.
maxTime(long maxTime, TimeUnit timeUnit)
Sets the maximum execution time on the server for this operation. If this time is exceeded, the Java Reactive Streams driver aborts the operation and raises an ExecutionTimeout.

以下示例使用find()方法查找"cuisine"字段值为"Italian"的所有文档,并将最长执行时间设置为10秒:

FindPublisher<Document> findDocPublisher = restaurants.find(
eq("cuisine", "Italian")).maxTime(10L, TimeUnit.SECONDS);
Flux.from(findDocPublisher)
.doOnNext(System.out::println)
.blockLast();

有关可用参数的完整列表,请参阅 API文档 用于FindPublisher 接口。

如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。

有关使用Java Reactive Streams驾驶员检索文档的可运行代码示例,请参阅从MongoDB读取数据指南。

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

查询