Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

カーソルからデータにアクセスする

項目一覧

  • Overview
  • カーソルの内容に反復的にアクセスする
  • すべてのドキュメントを検索する
  • テール可能カーソル
  • API ドキュメント

このガイドでは、 Java Reactive Streams ドライバーを使用して、カーソルからデータにアクセスする方法を学習できます。

カーソルは、読み取り操作の結果を反復可能なバッチで返すメカニズムです。 カーソルは一度にドキュメントのサブセットのみを保持するため、メモリ消費とネットワーク帯域幅使用量の両方が削減されます。

Java Reactive Streams ドライバーでは、一部のストリームはカーソルによってサポートされます。 これらの基礎となるカーソルで使用されるバッチのサイズは、 Publisher Subscriptionに要求された要求によって異なります。 基礎となる各カーソルに含まれるデータのバッチするサイズは、 FindPublisher.batchSize()メソッドを使用して設定できます。

このガイドの例では、 Atlasサンプルデータセットsample_restaurants.restaurantsコレクションを使用します。 無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、 スタートガイドをご覧ください。

重要

プロジェクトリ アクター ライブラリ

このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返されたPublisherインスタンスを消費します。 Project Reactive ライブラリとその使用方法の詳細については、「 使用 開始 」を 参照してください。 (Reactor ドキュメントの参照)。このガイドでは Project React ライブラリ メソッドをどのように使用しているかについて詳しくは、「 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();

CappedCappedコレクションをクエリする場合、クライアントがカーソルの結果を使い果たした後も開いたままになる 追尾可能 ( 追尾可能 (tailable) カーソルを使用できます。 CappedCappedコレクションに追尾可能 (tailable) カーソルを作成するには、 CursorType.TailableAwaitの値をFindPublisherオブジェクトのcursorType()メソッドに渡します。

次の例では、コレクションに追尾可能 (tailable) カーソルを作成し、その内容を出力します。

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

追尾可能 (tailable) カーソルとその使用方法の詳細については、 マニュアルの 追尾可能 (tailable) カーソルMongoDB Server のガイド を参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

個別のフィールド値の取得