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