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

個別のフィールド値の取得

このガイドでは、 Rubyドライバーを使用して、コレクション全体で指定されたフィールドの個別の値を検索する方法を学習できます。

コレクション内では、ドキュメントには単一のフィールドに異なる値が含まれる場合があります。例、restaurantsコレクション内の 1 つのドキュメントの borough 値は 'Manhattan' で、別のドキュメントの borough 値は 'Queens' です。Rubyドライバーを使用すると、コレクション内の複数のドキュメントにわたってフィールドに含まれるすべての一意の値を検索できます。

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

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

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

指定したフィールドの個別の値を検索するには、 distinctメソッドを呼び出し、個別の値を検索するフィールドの名前を渡します。

次の例では、 restaurantsコレクション内のboroughフィールドの個別の値を取得します。

results = collection.distinct('borough')
results.each do |value|
puts value
end
Bronx
Brooklyn
Manhattan
Missing
Queens
Staten Island

この操作では、個別のboroughフィールド値をそれぞれ保存する配列が返されます。 boroughフィールドでは複数のドキュメントが同じ値になっていますが、各値は結果に 1 回だけ表示されます。

distinct メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット全体で個別のフィールド値を検索できます。クエリフィルターは、操作内のドキュメントを一致させるために使用される検索条件を指定する式です。

Tip

クエリフィルターの作成の詳細については、クエリの指定ガイドを参照してください。

次の例では、 cuisineフィールドの値が'Italian'であるすべてのドキュメントのboroughフィールドの個別の値を取得します。

results = collection.distinct('borough', { cuisine: 'Italian' })
results.each do |value|
puts value
end
Bronx
Brooklyn
Manhattan
Queens
Staten Island

オプション値を指定する Hashオブジェクトを渡すことで、distinct メソッドの動作を変更できます。次の表では、操作をカスタマイズするために設定できるオプションについて説明します。

オプション
説明

collation

The collation to use for the operation.
Type: Hash

max_time_ms

The maximum amount of time in milliseconds that the operation can run.
Type: Integer

read

The read preference to use for the operation. To learn more, see Read Preference in the MongoDB Server manual.
Type: Hash

session

The session to use for the operation.
Type: Session

次の例では、name boroughフィールドフィールドが'Bronx' cuisineであるすべてのドキュメントの'Pizza' フィールドの個別の値を取得します。また、read オプションも設定され、これは操作にprimary_preferred読み込み設定 (read preference)を使用するように指示します。

filter = { borough: 'Bronx', cuisine: 'Pizza' }
options = { read: { mode: :primary_preferred } }
results = collection.distinct('name', filter, options)
results.each do |value|
puts value
end
$1.25 Pizza
18 East Gunhill Pizza
2 Bros
Aenos Pizza
Alitalia Pizza Restaurant
Amici Pizza And Pasta
Angie'S Cafe Pizza
Anthony & Joe'S Pizza
Anthony'S Pizza
Antivari Pizza
Arturo'S Pizza
Bartow Pizza
...

distinct メソッドの詳細については、APIドキュメントを参照してください。

戻る

返すフィールドを指定する

項目一覧