指定要返回的文档
概述
在本指南中,您可以通过以下方法了解如何指定从读取操作中返回哪些文档:
limit()
:指定从查询返回的文档的最大数量sort()
:指定返回文档的排序顺序skip()
:指定在返回查询结果之前要跳过的文档数
示例数据
本指南中的示例使用来自Atlas示例数据集的sample_restaurants
数据库中的restaurants
集合。要了解如何创建免费的MongoDB Atlas集群并加载数据集,请参阅Atlas入门指南。
此集合中的文档由以下Kotlin数据类建模:
data class Restaurant( val name: String, val borough: String, val cuisine: String )
限制
要指定从读取操作返回的最大文档数,请调用 limit()
方法。
以下示例找到所有具有 cuisine
字段值为 "意大利菜"
的餐厅,并将结果限制为 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()
方法。该方法接受一个排序方向作为参数。要指定排序方向,请使用 Sorts.ascending()
或 Sorts.descending()
方法。Sorts.ascending()
方法将值从最低到最高排序,而 Sorts.descending()
方法将值从最高到最低排序。如果不指定排序方向,则 sort()
以升序返回文档。
以下示例返回所有具有 cuisine
字段值为 "意大利菜"
的文档,并按 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
您可以在单个操作中组合 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文档