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

指定返回的文档

在本页中

  • 概述
  • 示例数据
  • 限制
  • 排序
  • 跳过
  • 组合限制、排序和跳过
  • 附加信息
  • API 文档

在本指南中,您可以了解如何通过以下方法指定从读取操作中返回的文档:

  • limit():指定从查询中返回的最大文档数

  • sort():指定返回文档的排序顺序

  • skip():指定在返回查询结果之前要跳过的文档数量

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

重要

项目反应器库

本指南使用项目反应器库来消费 Java 反应式流驱动方法返回的 Publisher 实例。要了解有关项目反应器库及其使用方法,请参阅 Reactor 文档中的入门。要了解本指南中如何使用项目反应器库方法,请参阅将数据写入 MongoDB指南。

为了指定从读取操作返回的最大文档数,将 limit() 方法链接到一个 find() 方法,并传递您希望返回的文档数。

以下示例查找所有具有 cuisine 字段值为 "Italian" 的餐厅,并将结果限制为 5 个文档。

FindPublisher<Document> findPublisher = restaurants.find(
eq("cuisine", "Italian")).limit(5);
Flux.from(findPublisher)
.doOnNext(x -> System.out.println(x.getString("name")))
.blockLast();
Isle Of Capri Resturant Italian
Arturo'S Italian
Patsy'S Italian Restaurant Italian
Piccola Venezia Italian
Roadhouse Restaurant Italian

提示

前面的示例返回查询返回的前五个文档,按 自然顺序 返回。下一节将描述如何按指定的排序顺序返回文档。

要按指定顺序返回文档,将 sort() 方法链接到 find() 方法。 sort() 方法接受一个排序方向方法作为参数。要指定排序方向,将 ascending()descending() 方法传递给 sort() 方法。然后,传递您想要排序的字段值。 ascending() 方法按从低到高的顺序排序值,而 descending() 方法按从高到低的顺序排序它们。如果您没有指定任何方向,则 sort 方法按升序返回结果。

以下示例返回所有具有 cuisine 值为 "Italian" 的文档,并按 name 字段升序排序

FindPublisher<Document> findPublisher = restaurants.find(
eq("cuisine", "Italian")).sort(ascending("name"));
Flux.from(findPublisher)
.doOnNext(x -> System.out.println(x.getString("name")))
.blockLast();
(Lewis Drug Store) Locanda Vini E Olii
101 Restaurant And Bar
44 Sw Ristorante & Bar
900 Park
A Voce
...
Zucchero E Pomodori

要跳过指定数量的文档后再返回查询结果,将 skip() 方法链接到 find() 方法,并传递要跳过的文档数量。skip() 方法会忽略查询结果中指定的文档数,并返回剩余的结果。

以下示例返回所有具有 borough 字段值为 "Manhattan" 的文档,并跳过前 10 个文档

FindPublisher<Document> findPublisher = restaurants.find(
eq("borough", "Manhattan")).skip(10);
Flux.from(findPublisher)
.doOnNext(x -> System.out.println(x.getString("name")))
.blockLast();
Cafe Metro
Lexler Deli
Domino'S Pizza
...

您可以通过将 limit()sort()skip() 方法链接在一起,在单个操作中组合这三个方法。这允许您设置要返回的最大排序文档数,并在返回之前跳过指定数量的文档。

以下示例返回具有 cuisine 值为 "Italian"5 个文档。结果按 name 字段值升序排序,跳过前 10 个文档。

FindPublisher<Document> findPublisher = restaurants.find(
eq("cuisine", "Italian"))
.sort(ascending("name"))
.limit(5)
.skip(10);
Flux.from(findPublisher)
.doOnNext(x -> System.out.println(x.getString("name")))
.blockLast();
Acqua
Acqua Restaurant
Acqua Santa
Acquista Trattoria
Acquolina Catering

注意

调用这些方法的顺序不会改变返回的文档。驱动程序会自动重新排序调用以首先执行排序和跳过操作,然后是限制操作。

有关指定查询的更多信息,请参阅指定查询指南。

有关检索文档的更多信息,请参阅检索数据指南。

有关本指南中讨论的任何方法或类型的更多信息,请参阅以下API文档

返回

指定返回的字段