Docs 菜单
Docs 主页
/ / /
java sync
/ / /

跳过返回的结果

在此页面上

  • Overview
  • 示例
  • 使用 FindIterable
  • 使用聚合

在本指南中,您可以了解如何使用 MongoDB Java 驱动程序跳过读取操作中返回的指定数量的结果。

您可以使用 skip()方法跳过查询返回结果上的结果。 您还可以通过指定$skip聚合阶段来跳过聚合管道中特定阶段的文档。

skip()方法接受一个整数,该整数指定从 FindIterable 返回的文档列表的开头要省略的文档数。

您可以使用skip()方法跳过前两个文档,如下所示:

collection.find().skip(2);

Aggregates.skip() 是聚合管道中的可选阶段,用于指定从上一阶段结果的开头算起要省略的文档数量。

您可以使用Aggregates.skip()方法跳过前两个文档,如下所示:

import com.mongodb.client.model.Aggregates;
collection.aggregate(Arrays.asList(Aggregates.match(), Aggregates.skip(2)));

以下示例涉及一家销售八种不同颜色油漆的油漆店。 最好的颜色比其他颜色卖得更快。 一天,一位客户询问最畅销(库存最低)的三种颜色是什么。 涂料商店在其paint_inventory集合的qty字段中跟踪库存:

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 10 }
{ "_id": 3, "color": "blue", "qty": 9 }
{ "_id": 4, "color": "white", "qty": 6 }
{ "_id": 5, "color": "yellow", "qty": 11 }
{ "_id": 6, "color": "pink", "qty": 3 }
{ "_id": 7, "color": "green", "qty": 8 }
{ "_id": 8, "color": "orange", "qty": 7 }

为了解决这种情况,油漆店需要使用空筛选器查询paint_inventorycollection,按qty字段对文档进行排序并省略前五个结果。

import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
// <MongoCollection setup code here>
Bson filter = Filters.empty();
collection.find(filter)
.sort(Sorts.descending("qty"))
.skip(5)
.forEach(doc -> System.out.println(doc.toJson()));
  • find()方法会返回所有文档。

  • sort()方法根据qty字段从最高到最低指定要显示的文档。

  • skip()方法指定省略前五个文档。

import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
import com.mongodb.client.model.Aggregates;
// <MongoCollection setup code here>
Bson filter = Filters.empty();
collection.aggregate(Arrays.asList(
Aggregates.match(filter),
Aggregates.sort(Sorts.descending("qty")),
Aggregates.skip(5)))
.forEach(doc -> System.out.println(doc.toJson()));
  • match()阶段会返回所有文档。

  • sort()阶段根据qty字段从最高到最低指定要显示的文档。

  • skip()阶段指定省略前五个文档。

以下显示了前面两个查询的输出:

{ "_id": 4, "color": "white", "qty": 6 }
{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 6, "color": "pink", "qty": 3 }

油漆店运行查询后,发现最畅销的三种颜色是粉色、红色和白色。

注意

如果 skip 的值大于或等于查询的匹配文档数,则该查询不返回任何文档。

如果上例中的skip()方法跳过前九个文档,则不会返回任何结果,因为指定的数量超过了匹配文档的数量。

Bson filter = Filters.empty();
collection.find(filter)
.sort(Sorts.descending("qty"))
.skip(9)
.forEach(doc -> System.out.println(doc.toJson()));

后退

对结果进行排序