Overview
このガイドでは、 Java Reactive Streams ドライバーを使用して、カーソルからデータにアクセスする方法を学習できます。
カーソルは、読み取り操作の結果を反復可能なバッチで返すメカニズムです。 カーソルは一度にドキュメントのサブセットのみを保持するため、メモリ消費とネットワーク帯域幅使用量の両方が削減されます。
Java Reactive Streams ドライバーでは、一部のストリームはカーソルによってサポートされます。これらの基礎となるカーソルで使用されるバッチのサイズは、Publisher の Subscription に要求された要求によって異なります。FindPublisher.batchSize() メソッドを使用して、基礎となる各カーソルに含まれるデータのバッチするサイズを設定できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants.restaurantsコレクションを使用します。 MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、開始ガイドを参照してください。
重要
プロジェクトリ アクター ライブラリ
このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返された インスタンスを消費します。Project Reactive ライブラリとその使用方法の詳細については、React ドキュメントの 使用開始 を参照してください。Publisherプロジェクト Reactor ライブラリとその使用方法の詳細については、React ドキュメントの使用開始を参照してください。このガイドでプロジェクト Reactorライブラリのメソッドをどのように使用するかについて詳しく学ぶには、「ドキュメントの挿入」ガイドを参照してください。
カーソルの内容に反復的にアクセスする
カーソルの内容を反復処理するには、次の例に示すように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 ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。