指定要返回的文档
Overview
在本指南中,您可以学习;了解如何使用以下方法指定从读取操作中返回哪些文档:
limit()
:指定查询返回的最大文档数sort()
:指定返回文档的排序顺序skip()
:指定在返回查询结果之前要跳过的文档数
样本数据
本指南中的示例使用 Atlas示例数据集中的sample_restaurants.restaurants
集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅入门。
重要
项目 Reactor 库
本指南使用 Project ReactorPublisher
库来使用Java Reactive Streams驾驶员方法返回的 实例。要学习;了解有关 Project Reactor 库及其使用方法的更多信息,请参阅 Reactor 文档中的“入门” 。要进一步学习;了解如何使用本指南中的 Project Reactor 库方法,请参阅“将数据写入MongoDB ”指南。
Limit
要指定读取操作返回的最大文档数,请将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
要按指定顺序返回文档,请将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 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: