Docs 菜单
Docs 主页
/ / /
Java Reactive Streams 驱动程序
/

从游标访问数据

在此页面上

  • Overview
  • 以迭代方式访问游标内容
  • 检索所有文档
  • 可追加游标
  • API 文档

在本指南中,您可以学习;了解如何使用Java Reactive Streams驾驶员从游标访问权限数据。

游标是一种以可迭代批处理方式返回读取操作结果的机制。 由于游标在任何给定时间仅保存文档的子集,因此游标可减少内存消耗和网络带宽使用量。

在Java Reactive Streams驾驶员中,某些流由游标支持。 这些根本的游标中使用的批处理大小取决于Publisher Subscription上请求的需求。 可以使用FindPublisher.batchSize()方法设立每个根本的游标包含的数据的批处理大小。

本指南中的示例使用 Atlas示例数据集中sample_restaurants.restaurants集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅入门指南。

重要

项目 Reactor 库

本指南使用 Project Reactor 库来使用Java Reactive Streams驾驶员方法返回的Publisher实例。 要学习;了解有关 Project Reactor 库及其使用方法的更多信息,请参阅 入门 在 Reactor 文档中。要进一步学习;了解如何使用本指南中的 Project Reactor 库方法,请参阅“将数据写入MongoDB ”指南。

要遍历游标的内容,请使用Flux.from()方法,如以下示例所示:

FindPublisher<Document> findPublisher = collection.find();
Flux.from(findPublisher)
.doOnNext(x -> System.out.println(x.getString("name")))
.blockLast();

警告

如果查询返回的文档数量和大小超过可用的应用程序内存,程序就会崩溃。 如果需要大型结果集,请以迭代方式访问游标。

要从游标检索所有文档,请将游标转换为List ,如以下示例所示:

FindPublisher<Document> findPublisher = collection.find(Filters.eq("name", "Dunkin' Donuts"));
List<Document> resultsList = Flux.from(findPublisher).collectList().block();

对固定大小固定大小集合进行查询时,可以使用可可追加游标,该游标在客户端用完游标中的结果后仍保持打开状态。 要在固定大小固定大小集合上创建可可追加游标,请将值CursorType.TailableAwait传递给FindPublisher对象的cursorType()方法。

以下示例在集合上创建可可追加游标并打印其内容:

FindPublisher<Document> findPublisher = collection.find().cursorType(CursorType.TailableAwait);
Flux.from(findPublisher)
.doOnNext(System.out::println)
.blockLast();

要学习;了解有关可追加游标及其用法的更多信息,请参阅MongoDB Server手册中的可追加游标指南

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

检索不同字段值