Docs Menu
Docs Home
/ / /
Scala
/

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

項目一覧

  • Overview
  • サンプル データ
  • Limit
  • Sort
  • スキップ
  • 制限、ソート、スキップの組み合わせ
  • 詳細情報
  • API ドキュメント

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

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

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

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

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

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

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

読み取り操作から返されるドキュメントの最大数を指定するには、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"))
{"_id": {"$oid": "..."}, ... , "name": "Isle Of Capri Resturant", "restaurant_id": "40364373"}
{"_id": {"$oid": "..."}, ... , "name": "Marchis Restaurant", "restaurant_id": "40364668"}
{"_id": {"$oid": "..."}, ... , "name": "Crystal Room", "restaurant_id": "40365013"}
{"_id": {"$oid": "..."}, ... , "name": "Forlinis Restaurant", "restaurant_id": "40365098"}
{"_id": {"$oid": "..."}, ... , "name": "Angelo Of Mulberry St.", "restaurant_id": "40365293"}

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"))
{"_id": {"$oid": "..."}, ... , "name": "44 Sw Ristorante & Bar", "restaurant_id": "40698807"}
{"_id": {"$oid": "..."}, ... , "name": "900 Park", "restaurant_id": "41707964"}
{"_id": {"$oid": "..."}, ... , "name": "A Voce", "restaurant_id": "41434084"}
...
{"_id": {"$oid": "..."}, ... , "name": "Zucchero E Pomodori", "restaurant_id": "41189590"}

クエリ結果を返す前に指定した数のドキュメントをスキップするには、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"))
{"_id": {"$oid": "..."}, ... , "name": "Cafe Metro", "restaurant_id": "40363298"}
{"_id": {"$oid": "..."}, ... , "name": "Lexler Deli", "restaurant_id": "40363426"}
{"_id": {"$oid": "..."}, ... , "name": "Domino'S Pizza", "restaurant_id": "40363644"}
...

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"))
{"_id": {"$oid": "..."}, ... , "name": "Acqua", "restaurant_id": "40871070"}
{"_id": {"$oid": "..."}, ... , "name": "Acqua Restaurant", "restaurant_id": "41591488"}
{"_id": {"$oid": "..."}, ... , "name": "Acqua Santa", "restaurant_id": "40735858"}
{"_id": {"$oid": "..."}, ... , "name": "Acquista Trattoria", "restaurant_id": "40813992"}
{"_id": {"$oid": "..."}, ... , "name": "Acquolina Catering", "restaurant_id": "41381423"}

注意

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

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

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

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

戻る

クエリを指定する