Overview
このガイドでは、 Rubyドライバーを使用して、読み取り操作 によりMongoDBコレクションからデータを検索する方法を学習できます。コレクションで find メソッドを呼び出して、基準のセットに一致するドキュメントを検索できます。
サンプル データ
companiessample_trainingこのガイドの例では、Atlasサンプルデータセットの データベースの コレクションを使用します。 Rubyアプリケーションからこのコレクションにアクセスするには、AtlasMongo::Client クラスターに接続する オブジェクトを作成し、 変数と 変数に次の値を割り当てます。databasecollection
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
注意
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを検索するには、クエリフィルターを渡せずに find メソッドを呼び出します。
results = collection.find
1 つのドキュメントの検索
コレクション内の 1 つのドキュメントを検索するには、find メソッドを呼び出し、検索するドキュメントの基準を指定するクエリフィルターを渡します。 次に、first メソッドを find にチェーンします。
クエリフィルターが複数のドキュメントと一致する場合、first メソッドは操作結果から最初に一致するドキュメントを検索します。
次の例では first メソッドを find に連鎖させて、nameフィールドの値が 'LinkedIn' になっている最初のドキュメントを検索します。
document = collection.find(name: 'LinkedIn').first puts document
検索動作の変更
操作結果を変更するには、オプション メソッドを find メソッドに連鎖させることができます。次の表で、これらのオプションの一部について説明します。
オプション | 説明 |
|---|---|
| バッチするごとに返すドキュメントの数。デフォルト値は |
| 操作に使用する照合。デフォルト値は、コレクションに指定された照合です。 |
| 操作に添付するコメント。 |
| 操作で返すことができるドキュメントの最大数。 |
| 結果を返す前にスキップするドキュメントの数。 |
| 操作が一致するドキュメントを返す順序。 |
次の例では、 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
オプションの完全なリストについては、 find メソッドのAPIドキュメントを参照してください。
詳細情報
クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
Rubyドライバーを使用してドキュメントを取得するコード例については、ドキュメントのクエリを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。