对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

查找文档

在本指南中,您可以学习;了解如何使用MongoDB Java Reactive Streams 驱动程序查找文档。

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

重要

项目 Reactor 库

本指南使用 Project Reactor 库来使用Java Reactive Streams驱动程序方法返回的 Publisher 实例。要学习;了解有关 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)

查询结果中返回的每个批处理中的最大文档数。默认下,驾驶员会将此值设置为 Long.MAX_VALUE

batchSize0 表示将建立游标,但第批处理不会返回任何文档。

collation(Collation collation)

将排序规则选项设置为 Collation 类的实例。

comment(String comment)

将字符串附加到查询。这可以帮助您跟踪和解释服务器日志和配置文件数据中的操作。要学习;了解有关查询注释的更多信息,请参阅MongoDB Server手册中的游标.comment() 页面。

hint(Bson hint)

获取或设置用于扫描文档的索引。 有关更多信息,请参阅 MongoDB Server 手册中的提示语句

以下示例使用 find() 方法查找 "cuisine"字段值为 "Italian" 并设置注释的所有文档:

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

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

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

有关使用Java Reactive Streams驾驶员检索文档的可运行代码示例,请参阅查询文档指南。

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