Overview
このガイドでは、 MongoDB Java Reactive Streams ドライバーを使用してドキュメントを検索する方法を学習できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants.restaurantsコレクションを使用します。 MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、はじめに を参照してください。
重要
プロジェクトリ アクター ライブラリ
このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返された Publisher インスタンスを消費します。Project Reactive ライブラリとその使用方法の詳細については、React ドキュメントの使用開始を参照してください。このガイドでは Project React ライブラリ メソッドをどのように使用しているかについて詳しくは、 「 MongoDBへのデータの書込み 」ガイドを参照してください。
ドキュメントの検索
Java Reactive Streams ドライバーには、コレクションからドキュメントを検索するための 1 つのメソッドが含まれています ( find() 。
このメソッドはクエリフィルターを受け取り、1 つ以上の一致するドキュメントを返します。 クエリフィルターは、クエリで検索するドキュメントを指定するオブジェクトです。
クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
1 つのドキュメントの検索
コレクション内の 1 つのドキュメントを検索するには、 first()メソッドをfind()メソッド呼び出しに連結し、検索するドキュメントの基準を指定するクエリフィルターをfind()メソッド呼び出しに渡します。 複数のドキュメントがクエリフィルターに一致する場合、 find().first()構造は検索した結果から最初に一致するドキュメントを返します。 クエリフィルターに一致するドキュメントがない場合、構造はNoneを返します。
Tip
find().first()構造は、一致するドキュメントが 1 つしかないことがわかっている場合や、最初の一致のみに該当する場合に便利です。
次の例では、 find().first()構造を使用して、 "cuisine"フィールドの値が"Bakery"である最初のドキュメントを検索します。
Publisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Bakery")).first(); Mono.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
ソートの詳細については、「返すドキュメントを指定する 」ガイドを参照してください。
複数ドキュメントの検索
コレクション内の複数のドキュメントを検索するには、検索するドキュメントの基準を指定するクエリフィルターを find() メソッドに渡します。
次の例では、 find()メソッドを使用して、 "cuisine"フィールドの値が"Spanish"であるすべてのドキュメントを検索します。
FindPublisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Spanish")); Flux.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
注意
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを検索するには、 find()メソッドにパラメータを渡しません。
Publisher<Document> findAllPublisher = restaurants.find(); Flux.from(findAllPublisher) .doOnNext(System.out::println) .blockLast();
検索動作の変更
他のメソッドをチェーンすることで、 find()メソッドの動作を変更できます。 次の表では、一般的に使用される方法について説明します。
Argument | 説明 |
|---|---|
| クエリ結果で返される各バッチする内のドキュメントの最大数。デフォルトでは 、ドライバーはこの値を
|
| 照合オプションを |
| クエリに文字列を付けます。これにより、サーバーログとプロファイル データ内の操作を追跡して解釈することができます。クエリ コメントの詳細については、 MongoDB Serverマニュアルの cursor.comment() ページ を参照してください。 |
| ドキュメントをスキャンするインデックスを取得または設定します。 詳細については、MongoDB Server マニュアルのヒント ステートメントを参照してください。 |
次の例では、find() メソッドを使用して、"cuisine"フィールドの値が "Italian" でコメントを設定しているすべてのドキュメントを検索します。
FindPublisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Italian")).comment("Find operation"); Flux.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
使用可能な引数の完全なリストについては、FindPublisher インターフェースのAPIドキュメントを参照してください。
詳細情報
クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
Java Reactive Streams ドライバーを使用してドキュメントを取得する実行可能なコード例については、 ドキュメントのクエリガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。