返すドキュメントを指定する
Overview
このガイドでは、次のメソッドを使用して、読み取り操作から返されるドキュメントを指定する方法を学習できます。
limit()
: クエリから返されるドキュメントの最大数を指定しますsort()
: 返されるドキュメントのソート順序を指定しますskip()
: クエリ結果を返す前にスキップするドキュメントの数を指定します
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants.restaurants
コレクションを使用します。 無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、「 を使い始める 」を参照してください。
重要
プロジェクトリ アクター ライブラリ
このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返されたPublisher
インスタンスを消費します。 Project Reactive ライブラリとその使用方法の詳細については、「 使用 開始 」を 参照してください。 (Reactor ドキュメントの参照)。このガイドでは Project React ライブラリ メソッドをどのように使用しているかについて詳しくは、「 MongoDBへのデータの書込み」ガイドを参照してください。
Limit
読み取り操作から返されるドキュメントの最大数を指定するには、 limit()
メソッドをfind()
メソッドに連結し、返されるドキュメントの数を渡します。
次の例では、 cuisine
の フィールド値が"Italian"
であるすべてのレストランを検索し、結果を5
ドキュメントに制限します。
FindPublisher<Document> findPublisher = restaurants.find( eq("cuisine", "Italian")).limit(5); Flux.from(findPublisher) .doOnNext(x -> System.out.println(x.getString("name"))) .blockLast();
Isle Of Capri Resturant Italian Arturo'S Italian Patsy'S Italian Restaurant Italian Piccola Venezia Italian Roadhouse Restaurant Italian
Tip
上記の例では、クエリによって返された最初の 5 つのドキュメントが自然な順序で返されます。 次のセクションでは、指定されたソート順序でドキュメントを返す方法について説明します。
Sort
指定した順序でドキュメントを返すには、 sort()
メソッドとfind()
メソッドをチェーンします。 sort()
メソッドは、並べ替え方向メソッドをパラメーターとして受け取ります。 並べ替え方向を指定するには、 ascending()
メソッドまたはdescending()
メソッドのいずれかをsort()
メソッドに渡します。 次に、並べ替えるフィールド値を渡します。 ascending()
メソッドでは値が最小から最大値の順にソートされ、 descending()
メソッドでは値が最大から最小値の順にソートされます。 どちらの方向も指定しない場合、 sort
メソッドは昇順で結果を返します。
次の例では、 "Italian"
のcuisine
値を持つすべてのドキュメントを、 name
フィールドで昇順にソートして返します。
FindPublisher<Document> findPublisher = restaurants.find( eq("cuisine", "Italian")).sort(ascending("name")); Flux.from(findPublisher) .doOnNext(x -> System.out.println(x.getString("name"))) .blockLast();
(Lewis Drug Store) Locanda Vini E Olii 101 Restaurant And Bar 44 Sw Ristorante & Bar 900 Park A Voce ... Zucchero E Pomodori
スキップ
クエリ結果を返す前に指定した数のドキュメントをスキップするには、 skip()
メソッドをfind()
メソッドに連結し、スキップするドキュメント数を渡します。 skip()
メソッドは、クエリ結果内の指定された数のドキュメントを無視し、残りを返します。
次の例では、 borough
フィールドの値が"Manhattan"
であるすべてのドキュメントを返し、最初の10
ドキュメントをスキップします。
FindPublisher<Document> findPublisher = restaurants.find( eq("borough", "Manhattan")).skip(10); Flux.from(findPublisher) .doOnNext(x -> System.out.println(x.getString("name"))) .blockLast();
Cafe Metro Lexler Deli Domino'S Pizza ...
制限、ソート、スキップの組み合わせ
1 つの操作でlimit()
、 sort()
、 skip()
メソッドを連結することで、組み合わせることができます。 これにより、返されるソートされたドキュメントの最大数を設定して、返される前に指定された数のドキュメントをスキップできます。
次の例では、 cuisine
の値が"Italian"
である5
ドキュメントが返されます。 結果はname
フィールド値の昇順でソートされ、最初の10
ドキュメントはスキップされます。
FindPublisher<Document> findPublisher = restaurants.find( eq("cuisine", "Italian")) .sort(ascending("name")) .limit(5) .skip(10); Flux.from(findPublisher) .doOnNext(x -> System.out.println(x.getString("name"))) .blockLast();
Acqua Acqua Restaurant Acqua Santa Acquista Trattoria Acquolina Catering
注意
これらのメソッドを呼び出す順序によって、返されるドキュメントは変更されません。 ドライバーは、ソートとスキップ操作を最初に実行し、その後に制限操作を実行するために、呼び出しの順序を自動的に並べ替えます。
詳細情報
クエリの指定の詳細については、「 クエリの指定」ガイドを参照してください。
ドキュメント取得の詳細については、「データ取得ガイド」を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。