Overview
このガイドでは、 .NET/ C#ドライバーを使用して、コレクション全体で指定されたフィールドの個別の値を検索する方法を学習できます。
コレクション内では、異なるドキュメントによって単一のフィールドの異なる値が含まれる場合があります。 例、restaurantsコレクション内の 1 つのドキュメントの borough 値は "Manhattan" で、別のドキュメントの borough 値は "Queens" です。 .NET/ C#ドライバーを使用すると、コレクション内の複数のドキュメントにわたってフィールドに含まれるすべての一意の値を検索できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants.restaurantsコレクションを使用します。 無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、 クイック スタートを参照してください。
このページの例では、次の Restaurantクラスを使用して、コレクション内のドキュメントをモデル化します。
public class Restaurant { public ObjectId? Id { get; set; } [] public string? Name { get; set; } [] public string? Cuisine { get; set; } [] public string? Borough { get; set; } }
Retrieve Distinct Values
指定されたフィールドの個別の値を検索するには、IMongoCollection<TDocument>インスタンスの Distinct() メソッドまたは DistinctAsync() メソッドを呼び出し、個別の値を検索するフィールドの名前を渡します。
コレクション全体で値を取得
次の例では、 restaurantsコレクション内の boroughフィールドの個別の値を取得します。 対応するコードを表示するには、Asynchronous タブまたは Synchronousタブを選択します。
var results = await collection.DistinctAsync<string>(r => r.Borough, Builders<Restaurant>.Filters.Empty); await results.ForEachAsync(result => Console.WriteLine(result));
Bronx Brooklyn Manhattan Missing Queens Staten Island
var results = collection.Distinct<string>(r => r.Borough, Builders<Restaurant>.Filters.Empty).ToList(); foreach (var result in results) { Console.WriteLine(result); }
Bronx Brooklyn Manhattan Missing Queens Staten Island
この操作では、個別の boroughフィールド値ごとにアクセスするために反復処理できるカーソルが返されます。 boroughフィールドでは複数のドキュメントが同じ値になっていますが、各値は結果に 1 回だけ表示されます。
指定されたドキュメント全体で値を取得
メソッドと Distinct()DistinctAsync()メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット内で個別のフィールド値を検索できます。クエリフィルターは、操作内のドキュメントを一致させるために使用される検索条件を指定する式です。 クエリフィルターの作成の詳細については、「 クエリの指定 」ガイドを参照してください。
次の例では、 cuisineフィールドの値が "Italian" であるすべてのドキュメントの boroughフィールドの個別の値を取得します。 対応するコードを表示するには、Asynchronous タブまたは Synchronousタブを選択します。
var filter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Italian"); var results = await collection.DistinctAsync<string>(r => r.Borough, filter); await results.ForEachAsync(result => Console.WriteLine(result));
Bronx Brooklyn Manhattan Queens Staten Island
var filter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Italian"); var results = collection.Distinct<string>(r => r.Borough, filter).ToList(); foreach (var result in results) { Console.WriteLine(result); }
Bronx Brooklyn Manhattan Queens Staten Island
個別の動作の変更
任意のパラメータとして DistinctOptionsインスタンスを指定することで、Distinct() メソッドと DistinctAsync() メソッドの動作を変更できます。 次の表では、DistinctOptionsインスタンスに設定できるプロパティについて説明します。
方式 | 説明 |
|---|---|
| Sets the collation to use for the operation. Data type: Collation |
| Sets the maximum amount of time that the operation can run. Data type: TimeSpan |
| Attaches a comment to the operation. Data type: BsonValue or string |
次の例では、 boroughフィールド値が "Bronx" で、かつ cuisineフィールド値が "Pizza" であるすべてのドキュメントの nameフィールドの個別の値を取得します。 次に、Distinct() メソッドに DistinctOptionsインスタンスを提供して操作にコメントを追加します。
AsynchronousSynchronous対応するコードを表示するには、 タブまたは タブを選択します。
var cuisineFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Pizza"); var boroughFilter = Builders<Restaurant>.Filter.Eq(r => r.Borough, "Bronx"); var filter = Builders<Restaurant>.Filter.And(cuisineFilter, boroughFilter); var options = new DistinctOptions { Comment = "Find all Italian restaurants in the Bronx" }; var results = await collection.DistinctAsync<string>(r => r.Name, filter, options); await results.ForEachAsync(result => Console.WriteLine(result));
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant Amici Pizza And Pasta Angie'S Cafe Pizza ...
var cuisineFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Pizza"); var boroughFilter = Builders<Restaurant>.Filter.Eq(r => r.Borough, "Bronx"); var filter = Builders<Restaurant>.Filter.And(cuisineFilter, boroughFilter); var options = new DistinctOptions { Comment = "Find all Italian restaurants in the Bronx" }; var results = collection.Distinct<string>(r => r.Name, filter).ToList(); foreach (var result in results) { Console.WriteLine(result); }
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant Amici Pizza And Pasta Angie'S Cafe Pizza ...
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。