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

ドキュメントの検索

このガイドでは、 Rubyドライバーを使用して、読み取り操作 によりMongoDBコレクションからデータを検索する方法を学習できます。コレクションで find メソッドを呼び出して、基準のセットに一致するドキュメントを検索できます。

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

database = client.use('sample_training')
collection = database[:companies]

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

コレクションからドキュメントを検索するには、find メソッドを使用します。このメソッドはクエリフィルターパラメーターを受け取り、クエリを表す Mongo::Collection::Viewオブジェクトを返します。ドライバーは、firsteach などのメソッドを使用して結果を取得するまで、クエリの実行を延期します。結果をリクエストと、ドライバーはクエリをサーバーに送信し、結果にアクセスできる 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 つのドキュメントを検索するには、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",
...}

Tip

並び替え順

ソート条件が指定されていない場合、 firstメソッドはディスク上の自然な順序で最初のドキュメントを返します。

操作結果を変更するには、オプション メソッドを find メソッドに連鎖させることができます。次の表で、これらのオプションの一部について説明します。

オプション
説明

batch_size

The number of documents to return per batch. The default value is 101.
Type: Integer

collation

The collation to use for the operation. The default value is the collation specified for the collection.
Type: Hash

comment

The comment to attach to the operation.
Type: Object

limit

The maximum number of documents the operation can return.
Type: Integer

skip

The number of documents to skip before returning results.
Type: Integer

sort

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 ドキュメントを参照してください。

戻る

クエリを指定する

項目一覧