Overview
このガイドでは、次のメソッドを find
メソッドに連結して、読み取り操作から返されるドキュメントを指定する方法を学習できます。
サンプル データ
このガイドの例では、Atlasサンプルデータセット の sample_restaurants
データベースの restaurants
コレクションを使用します。Rubyアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続する Mongo::Client
オブジェクトを作成し、次の値を database
変数と collection
変数に割り当てます。
database = client.use('sample_restaurants') collection = database[:restaurants]
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
Limit
読み取り操作から返されるドキュメントの最大数を指定するには、操作に 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
オプションを適用します。このオプションは、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"} ...
制限、ソート、スキップの組み合わせ
limit
、sort
、skip
メソッドを単一の 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ドライバーは、ソート操作を最初に実行し、次にスキップ操作を実行し、次に制限操作 を実行するように呼び出しの順序を自動的に並べ替えます。
詳細情報
ドキュメント取得の詳細については、 データ取得ガイドを 参照してください。
クエリの指定の詳細については、「 クエリの指定」ガイドを参照してください。
API ドキュメント
find
メソッドとそのオプションについて詳しくは、APIドキュメント を参照してください。