Docs 菜单
Docs 主页
/ / /
Kotlin Sync 驱动程序
/

指定要返回的文档

在此页面上

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

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

  • 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字段值为"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()方法将排序方向作为参数。 要指定排序方向,请使用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 文档:

后退

指定要返回的字段