返すドキュメントを指定する
Overview
このガイドでは、次のメソッドを find()
メソッドに連結して、読み取り操作から返されるドキュメントを指定する方法を学習できます。
limit() : クエリから返されるドキュメントの最大数を指定します
sort() : 返されるドキュメントのソート順序を指定します
skip() : クエリ結果を返す前にスキップするドキュメントの数を指定します
サンプル データ
restaurants
sample_restaurants
このガイドの例では、Atlasサンプルデータセット の データベースの コレクションを使用します。 Scalaアプリケーションからこのコレクションにアクセスするには、AtlasMongoClient
クラスターに接続する を作成し、 変数と 変数に次の値を割り当てます。database
collection
val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants") val collection: MongoCollection[Document] = database.getCollection("restaurants")
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
Limit
読み取り操作から返されるドキュメントの最大数を指定するには、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 つのドキュメントが返されます。 次のセクションでは、指定された順序でドキュメントを返す方法について説明します。
Sort
指定した順序でドキュメントを返すには、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 ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。