Docs Menu
Docs Home
/ / /
Ruby ドライバー
/

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

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

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

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

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

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

database = client.use('sample_restaurants')
collection = database[:restaurants]

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

読み取り操作から返されるドキュメントの最大数を指定するには、操作に limit オプションを適用します。このオプションは、limit setter メソッドを find メソッドに連結することで設定できます。

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

filter = { cuisine: 'Italian' }
collection.find(filter)
.limit(5)
.each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Philadelhia Grille Express",
"restaurant_id"=>"40364305"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Isle Of Capri Restaurant",
"restaurant_id"=>"40364373"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Marchis Restaurant",
"restaurant_id"=>"40364668"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Crystal Room",
"restaurant_id"=>"40365013"}
{"_id"=>BSON::ObjectId('...'), ... , name"=>"Forlinis Restaurant",
"restaurant_id"=>"40365098"}

Tip

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

指定した順序でドキュメントを返すには、 読み取り操作に sort オプションを適用します。このオプションは、sort setter メソッドを find メソッドに連結することで設定できます。

sort を呼び出すときに、フィールドを渡して、結果を と並べ替え方向で並べ替えます。並べ替え方向の値が 1 の場合、値は最低から最高の順にソートされ、-1 の値は最高から最低の順にソートされます。

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

filter = { cuisine: 'Italian' }
collection.find(filter)
.sort(name: 1)
.each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"(Lewis Drug Store) Locanda Vini E Olii",
"restaurant_id"=>"40804423"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"101 Restaurant And Bar",
"restaurant_id"=>"40560108"}
...
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Zucchero E Pomodori",
"restaurant_id"=>"41189590"}

クエリ結果を返す前に指定した数のドキュメントをスキップするには、読み取り操作に skip オプションを適用します。このオプションは、skip setter メソッドを find メソッドに連結することで設定できます。

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

filter = { borough: 'Manhattan' }
collection.find(filter)
.skip(10)
.each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Cafe Metro", "restaurant_id"=>"40363298"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Lexler Deli", "restaurant_id"=>"40363426"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Domino'S Pizza", "restaurant_id"=>"40363644"}
...

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

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

filter = { cuisine: 'Italian' }
collection.find(filter)
.limit(5)
.skip(10)
.sort(name: 1)
.each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua", "restaurant_id"=>"40871070"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua Restaurant",
"restaurant_id"=>"41591488"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua Santa", "restaurant_id"=>"40735858"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acquista Trattoria",
"restaurant_id"=>"40813992"}
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acquolina Catering", "restaurant_id"=>"41381423"}

注意

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

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

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

find メソッドとそのオプションについて詳しくは、APIドキュメント を参照してください。

戻る

クエリを指定する

項目一覧