指定要返回的文档
Overview
在本指南中,您可以学习;了解如何使用以下方法指定从读取操作中返回哪些文档:
limit()
:指定查询返回的最大文档数sort()
:指定返回文档的排序顺序skip()
:指定在返回查询结果之前要跳过的文档数
样本数据
本指南中的示例使用 Atlas示例数据集的sample_restaurants
数据库中的restaurants
集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
此集合中的文档由以下Kotlin数据类建模:
data class Restaurant( val name: String, val borough: String, val cuisine: String )
Limit
要指定读取操作返回的最大文档数,请调用limit()
方法。
以下示例查找cuisine
字段值为"Italian"
的所有餐厅,并将结果限制为5文档:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .limit(5) results.forEach { result -> println(result) }
Restaurant(name=Philadelphia Grille Express, borough=Brooklyn, cuisine=Italian) Restaurant(name=Isle Of Capri Resturant, borough=Manhattan, cuisine=Italian) Restaurant(name=Marchis Restaurant, borough=Manhattan, cuisine=Italian) Restaurant(name=Crystal Room, borough=Staten Island, cuisine=Italian) Restaurant(name=Forlinis Restaurant, borough=Manhattan, cuisine=Italian)
提示
前面的示例按自然顺序返回查询返回的前五个文档。 以下部分介绍如何按指定的排序顺序返回文档。
Sort
要按指定顺序返回文档,请调用sort()
方法。 sort()
方法将排序方向作为参数。 要指定排序方向,请使用Sorts.ascending()
或Sorts.descending()
方法。 Sorts.ascending()
方法将值从最低到最高排序, Sorts.descending()
方法将值从最高到最低排序。 如果不指定排序方向, sort()
将按升序返回文档。
以下示例返回cuisine
字段值为"Italian"
的所有文档,并按name
字段的值升序排序:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .sort(Sorts.ascending(Restaurant::name.name)) results.forEach { result -> println(result) }
Restaurant(name=(Lewis Drug Store) Locanda Vini E Olii, borough=Brooklyn, cuisine=Italian) Restaurant(name=101 Restaurant And Bar, borough=Brooklyn, cuisine=Italian) Restaurant(name=44 Sw Ristorante & Bar, borough=Manhattan, cuisine=Italian) Restaurant(name=900 Park, borough=Bronx, cuisine=Italian) Restaurant(name=A Voce, borough=Manhattan, cuisine=Italian) ...
跳过
要在返回查询结果之前跳过指定数量的文档,请调用skip()
方法并传入要跳过的文档数。 skip()
方法会忽略查询结果中指定数量的文档并返回其余文档。
以下示例返回cuisine
字段值为"Italian"
的所有文档并跳过前10文档:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .skip(10) results.forEach { result -> println(result) }
Restaurant(name=San Pietro, borough=Manhattan, cuisine=Italian) Restaurant(name=Manetta's Ristorante, borough=Queens, cuisine=Italian) Restaurant(name=Salvi Restaurant, borough=Brooklyn, cuisine=Italian) Restaurant(name=Tommaso Restaurant, borough=Brooklyn, cuisine=Italian) Restaurant(name=Da Rosina Restaurant, borough=Manhattan, cuisine=Italian) ...
组合限制、排序和跳过
您可以在单个操作中组合使用limit()
、 sort()
和skip()
方法。 这允许您设置要返回的最大排序文档数,在返回之前跳过指定数量的文档。
以下示例返回cuisine
字段值为"Italian"
的文档。 结果按字母顺序排序,跳过前10文档,并将结果限制为5文档:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .sort(Sorts.ascending(Restaurant::name.name)) .skip(10) .limit(5) results.forEach { result -> println(result) }
Restaurant(name=Acqua, borough=Manhattan, cuisine=Italian) Restaurant(name=Acqua Restaurant, borough=Manhattan, cuisine=Italian) Restaurant(name=Acqua Santa, borough=Brooklyn, cuisine=Italian) Restaurant(name=Acquista Trattoria, borough=Queens, cuisine=Italian) Restaurant(name=Acquolina Catering, borough=Manhattan, cuisine=Italian)
注意
调用这些方法的顺序不会更改返回的文档。 驾驶员会自动对调用重新排序,以首先执行排序和跳过操作,然后执行限制操作。
更多信息
有关指定查询的更多信息,请参阅指定查询。
有关检索文档的更多信息,请参阅检索数据。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: