Overview
このガイドでは、 Rubyドライバーを使用して、読み取り操作 によりMongoDBコレクションからデータを検索する方法を学習できます。コレクションで find メソッドを呼び出して、基準のセットに一致するドキュメントを検索できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセット の sample_trainingデータベースの companiesコレクションを使用します。Rubyアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続する Mongo::Clientオブジェクトを作成し、次の値を database 変数と collection 変数に割り当てます。
database = client.use('sample_training') collection = database[:companies]
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDB を使い始めるガイドを 参照してください 。
ドキュメントの検索
コレクションからドキュメントを検索するには、find メソッドを使用します。このメソッドはクエリフィルターパラメーターを受け取り、クエリを表す Mongo::Collection::Viewオブジェクトを返します。ドライバーは、first や each などのメソッドを使用して結果を取得するまで、クエリの実行を延期します。結果をリクエストと、ドライバーはクエリをサーバーに送信し、結果にアクセスできる Mongo::Cursorオブジェクトを返します。
find メソッドにオプション メソッドを連鎖させて、操作の結果を絞り込むことができます。
Tip
クエリフィルターの詳細については、「 クエリの指定」ガイドを参照してください。
複数ドキュメントの検索
コレクション内の複数のドキュメントを検索するには、検索するドキュメントの基準を指定するクエリフィルターを find メソッドに渡します。
次の例では、 findメソッドを使用して、 founded_yearフィールドの値が1970であるすべてのドキュメントを検索します。
results = collection.find(founded_year: 1970)
クエリを表す Mongo::Collection::Viewオブジェクトで each メソッドを呼び出すと、ドライバーは Mongo::Cursorオブジェクトを返します。カーソルは、アプリケーションがデータベースの結果を反復処理しながら、特定の時点でメモリ内に結果のサブセットのみを保持できるようにするメカニズムです。カーソルは、find メソッドが大量のドキュメントを返す場合に便利です。
次のコードでは、each メソッドを呼び出してクエリ結果を反復処理します。
results.each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "name"=>"Mitsubishi Motors", "permalink"=>"mitsubishi-motors", "crunchbase_url"=>"http://www.crunchbase.com/company/mitsubishi-motors", "homepage_url"=>"http://www.mitsubishi-motors.com", ...} {"_id"=>BSON::ObjectId('...'), "name"=>"Western Digital", "permalink"=>"western-digital", "crunchbase_url"=>"http://www.crunchbase.com/company/western-digital", "homepage_url"=>"http://www.wdc.com/en", ...} {"_id"=>BSON::ObjectId('...'), "name"=>"Celarayn", "permalink"=>"celarayn", "crunchbase_url"=>"http://www.crunchbase.com/company/celarayn", "homepage_url"=>"http://www.celarayn.es", ...}
注意
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを検索するには、クエリフィルターを渡せずに find メソッドを呼び出します。
results = collection.find
1 つのドキュメントの検索
コレクション内の 1 つのドキュメントを検索するには、find メソッドを呼び出し、検索するドキュメントの基準を指定するクエリフィルターを渡します。 次に、first メソッドを find にチェーンします。
クエリフィルターが複数のドキュメントと一致する場合、first メソッドは操作結果から最初に一致するドキュメントを検索します。
次の例では first メソッドを find に連鎖させて、nameフィールドの値が 'LinkedIn' になっている最初のドキュメントを検索します。
document = collection.find(name: 'LinkedIn').first puts document
{"_id"=>BSON::ObjectId('...'), "name"=>"LinkedIn", "permalink"=>"linkedin", "crunchbase_url"=>"http://www.crunchbase.com/company/linkedin", "homepage_url"=>"http://linkedin.com", "blog_url"=>"http://blog.linkedin.com", ...}
検索動作の変更
操作結果を変更するには、オプション メソッドを find メソッドに連鎖させることができます。次の表で、これらのオプションの一部について説明します。
オプション | 説明 |
|---|---|
| The number of documents to return per batch. The default value is 101.Type: Integer |
| The collation to use for the operation. The default value is the collation
specified for the collection. Type: Hash |
| The comment to attach to the operation. Type: Object |
| The maximum number of documents the operation can return. Type: Integer |
| The number of documents to skip before returning results. Type: Integer |
| The order in which the operation returns matching documents. Type: Hash |
次の例では、 findメソッドを使用して、 number_of_employeesフィールドの値が1000であるすべてのドキュメントを検索します。 この例ではlimitオプションを使用して最大2の結果が返されます。
limit_results = collection.find(number_of_employees: 1000).limit(2) limit_results.each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "name"=>"Akamai Technologies", "permalink"=>"akamai-technologies", "crunchbase_url"=>"http://www.crunchbase.com/company/akamai-technologies", "homepage_url"=>"http://www.akamai.com", ...} {"_id"=>BSON::ObjectId('...'), "name"=>"Yodle", "permalink"=>"yodle", "crunchbase_url"=>"http://www.crunchbase.com/company/yodle", "homepage_url"=>"http://www.yodle.com", ...}
オプションの完全なリストについては、find メソッドのAPIドキュメントを参照してください。
詳細情報
クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
Rubyドライバーを使用してドキュメントを取得するコード例については、ドキュメントのクエリを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。