個別のフィールド値の取得
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
インスタンスに設定できるプロパティについて説明します。
方式 | 説明 |
---|---|
Collation | Sets the collation to use for the operation. Data type: Collation |
MaxTime | Sets the maximum amount of time that the operation can run. Data type: TimeSpan |
Comment | 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 ドキュメントを参照してください。