指定返回的文档
概述
在本指南中,您可以了解如何通过以下方法指定从读取操作中返回的文档:
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
您可以通过将 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 文档
有关本指南中讨论的任何方法或类型的更多信息,请参阅以下API文档