Retrieve Data
Overview
このガイドでは、 MongoDB Java Reactive Streams ドライバーを使用して、読み取り操作によりMongoDBコレクションからデータを検索する方法を学習できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットの sample_restaurants.restaurants
コレクションを使用します。 無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、「 スタートガイド 」を参照してください。
重要
プロジェクトリ アクター ライブラリ
このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返されたPublisher
インスタンスを消費します。 Project Reactive ライブラリとその使用方法の詳細については、「 使用 開始 」を 参照してください。 (Reactor ドキュメントの参照)。このガイドでは 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 | 説明 |
---|---|
batchSize(int batchSize) | Limits the number of documents to hold in a cursor at a given time. To
learn more about cursors, see cursor in the MongoDB Server documentation. |
collation(Collation collation) | Sets the collation options as an instance of the Collation class. |
comment(String comment) | Attaches a string to the query. This can help you trace and interpret the
operation in the server logs and in profile data. To learn more about query comments,
see the $comment page. |
hint(Bson hint) | Gets or sets the index to scan for documents.
For more information, see the hint statement
in the MongoDB Server manual. |
maxTime(long maxTime, TimeUnit timeUnit) | Sets the maximum execution time on the server for this operation. If this time is
exceeded, the Java Reactive Streams driver aborts the operation and raises an ExecutionTimeout . |
次の例では、 find()
メソッドを使用して、 "cuisine"
フィールドの値が"Italian"
で、最大実行時間が10秒に設定されているすべてのドキュメントを検索します。
FindPublisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Italian")).maxTime(10L, TimeUnit.SECONDS); Flux.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
使用可能な引数の完全なリストについては、 APIドキュメント を参照してくださいFindPublisher
( インターフェースの場合
詳細情報
クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
Java Reactive Streams ドライバーを使用してドキュメントを取得する実行可能なコード例については、 MongoDBからのデータの読み取り を参照してガイド。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。