AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

返すドキュメントを指定する

このガイドでは、次のメソッドを find() メソッドに連結して、読み取り操作から返されるドキュメントを指定する方法を学習できます。

  • limit() : クエリから返されるドキュメントの最大数を指定します

  • sort() : 返されるドキュメントのソート順序を指定します

  • skip() : クエリ結果を返す前にスキップするドキュメントの数を指定します

restaurantssample_restaurantsこのガイドの例では、Atlasサンプルデータセット の データベースの コレクションを使用します。Scalaアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続する MongoClient を作成し、database 変数と collection 変数に次の値を割り当てます。

val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、MongoDBを使い始めるガイドを参照してください。

読み取り操作から返されるドキュメントの最大数を指定するには、FindObservableクラスが提供する limit() メソッドを使用します。 find() メソッドを呼び出した後、limit() メソッドを連鎖させて操作の動作を変更します。

次の例では、 cuisineフィールドの値が"Italian"であるすべてのレストランを検索し、結果を5ドキュメントに制限します。

val filter = equal("cuisine", "Italian")
collection.find(filter).limit(5).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))

Tip

上記の例では、データベース内の自然な順序に従ってクエリに一致する最初の 5 つのドキュメントが返されます。 次のセクションでは、指定された順序でドキュメントを返す方法について説明します。

指定した順序でドキュメントを返すには、FindObservableクラスが提供する sort() メソッドを使用します。 find() メソッドを呼び出した後、sort() メソッドを連鎖させて操作の動作を変更します。

sort() を呼び出すときに、フィールドを渡して、結果を と並べ替え方向で並べ替えます。 ascending() メソッドを使用して最低から最高の順に値を並べ替えるか、descending() メソッドを使用して最高から最低の順に並べ替えます。

次の例では、 cuisineフィールド値が "Italian" であるすべてのドキュメントを、nameフィールド値の昇順でソートして返します。

val filter = equal("cuisine", "Italian")
collection.find(filter).sort(ascending("name")).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))

クエリ結果を返す前に指定した数のドキュメントをスキップするには、FindObservableクラスによって提供される skip() メソッドを使用します。 find() メソッドを呼び出した後、skip() メソッドを連鎖させて操作の動作を変更します。

次の例では、 boroughフィールドの値が"Manhattan"であるすべてのドキュメントを返し、最初の10ドキュメントをスキップします。

val filter = equal("borough", "Manhattan")
collection.find(filter).skip(10).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))

limit()、sort()、skip() メソッドを単一の find() メソッド呼び出しに連鎖させることができます。 これにより、 読み取り操作から返されるソートされたドキュメントの最大数を設定でき、返される前に指定された数のドキュメントをスキップできます。

次の例では、 cuisine の値が "Italian" である 5 ドキュメントが返されます。 結果は nameフィールド値の昇順でソートされ、最初の 10 ドキュメントはスキップされます。

val filter = equal("cuisine", "Italian")
collection.find(filter)
.limit(5)
.skip(10)
.sort(ascending("name"))
.subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))

注意

これらのメソッドを呼び出す順序によって、返されるドキュメントは変更されません。 Scalaドライバーは、最初にソート操作、次にスキップ操作、次に制限操作を実行して、呼び出しの順序を自動的に並べ替えます。

ドキュメント取得の詳細については、「データ取得ガイド」を参照してください。

クエリの指定の詳細については、「 クエリの指定」ガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。