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

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

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

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

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

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

重要

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

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

戻る

個別のフィールド値

項目一覧