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

指定要返回的文档

在此页面上

  • Overview
  • 样本数据
  • Limit
  • Sort
  • 跳过
  • 组合限制、排序和跳过
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何使用以下方法指定从读取操作中返回哪些文档:

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

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

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

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

重要

项目 Reactor 库

本指南使用 Project ReactorPublisher 库来使用Java Reactive Streams驾驶员方法返回的 实例。要学习;了解有关 Project Reactor 库及其使用方法的更多信息,请参阅 Reactor 文档中的“入门” 。要进一步学习;了解如何使用本指南中的 Project 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()方法链接在一起,从而将它们组合在单个操作中。 这允许您设立要返回的最大排序文档数,在返回之前跳过指定数量的文档。

5以下示例返回cuisine 值为"Italian" 的 文档。结果按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 文档:

后退

指定要返回的字段