从游标访问数据
Overview
在本指南中,您可以学习;了解如何使用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 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: