AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

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

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

このガイドの例では、Atlasサンプルデータセットsample_restaurants.restaurantsコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「 .NET/ C#ドライバーを使い始める 」を参照してください。

このページの例では、次の Restaurantクラスを使用して、コレクション内のドキュメントをモデル化します。

public class Restaurant {
public ObjectId? Id { get; set; }
[BsonElement("name")]
public string? Name { get; set; }
[BsonElement("cuisine")]
public string? Cuisine { get; set; }
[BsonElement("borough")]
public string? Borough { get; set; }
}

指定されたフィールドの個別の値を検索するには、IMongoCollection<TDocument>インスタンスの Distinct() メソッドまたは DistinctAsync() メソッドを呼び出し、個別の値を検索するフィールドの名前を渡します。

次の例では、 restaurantsコレクション内の boroughフィールドの個別の値を取得します。 対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

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
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

この操作では、個別の boroughフィールド値ごとにアクセスするために反復処理できるカーソルが返されます。 boroughフィールドでは複数のドキュメントが同じ値になっていますが、各値は結果に 1 回だけ表示されます。

Distinct() メソッドと DistinctAsync() メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット内で個別のフィールド値を検索できます。クエリフィルターは、操作内のドキュメントを一致させるために使用される検索条件を指定する式です。クエリフィルターの作成の詳細については、クエリフィルターの作成ガイドを参照してください。

次の例では、 cuisineフィールドの値が "Italian" であるすべてのドキュメントの boroughフィールドの個別の値を取得します。 対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

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
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

任意のパラメータとして DistinctOptionsインスタンスを指定することで、Distinct() メソッドと DistinctAsync() メソッドの動作を変更できます。 次の表では、DistinctOptionsインスタンスに設定できるプロパティについて説明します。

方式
説明

Collation

操作に使用する照合を設定します。詳細については、このページの「照合」セクションを参照してください。
デフォルト: null
データ型: 照合

MaxTime

操作を実行する最大時間を設定します。
データ型TimeSpan

Comment

操作にコメントを添付します。
データ型 : BsonValue または string

次の例では、 boroughフィールド値が "Bronx" で、かつ cuisineフィールド値が "Pizza" であるすべてのドキュメントの nameフィールドの個別の値を取得します。 次に、Distinct() メソッドに DistinctOptionsインスタンスを提供して操作にコメントを追加します。

SynchronousAsynchronous対応するコードを表示するには、 タブまたは タブを選択します。

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
...
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
...

操作の照合を構成するには、照合クラスのインスタンスを作成します。

次の表では、Collation コンストラクターが受け入れるパラメーターを説明しています。また、各設定の値を読み取るために使用できる対応するクラスプロパティも一覧表示されます。

Parameter
説明
クラスプロパティ

locale

国際化コンポーネント for Unicode (ICU) ロケールを指定します。サポートされているロケールの一覧については、MongoDB Server マニュアルの「照合ロケールとデフォルトパラメータ」を参照してください。

単純なバイナリ比較を使用する場合は、Collation.Simple 静的プロパティを使用して、locale"simple" に設定された Collation オブジェクトを返します。
データ型: string

Locale

caseLevel

(任意) 大文字と小文字の比較を含めるかどうかを指定します。

この引数が true の場合、ドライバーの動作は strength 引数の値によって異なります。

- strengthCollationStrength.Primary の場合、ドライバーは基本文字と大文字と小文字を比較します。
- strengthCollationStrength.Secondary の場合、ドライバーは基本文字、分音符号、その他の二次的な違い、および大文字と小文字を比較します。
- strength がその他の値の場合、この引数は無視されます。

この引数が false の場合、ドライバーは強度レベル Primary または Secondary での大文字と小文字の比較を含みません。

データ型: boolean
デフォルト: false

CaseLevel

caseFirst

(任意) 三次レベルの比較中の大文字と小文字の相違のソート順序を指定します。

データ型: CollationCaseFirst
デフォルト: CollationCaseFirst.Off

CaseFirst

strength

(任意) ICU ドキュメントで定義されている、実行する比較のレベルを指定します。

データ型: CollationStrength
デフォルト: CollationStrength.Tertiary

Strength

numericOrdering

(任意) ドライバーが数字の文字列を数値として比較するかどうかを指定します。

この引数が true の場合、ドライバーは数値型文字列を数値として比較します。例えば、文字列 "10" と "2" を比較する場合、ドライバーは値を 10 と 2 として取り扱い、10 が大きいことを確認します。

この引数が false の場合、または除外される場合、ドライバーは数値型文字列を文字列として比較します。例えば、文字列 "10" と "2" を比較する場合、ドライバーは 1 文字ずつ比較します。"1" は "2" より小さいため、ドライバーは "10" が "2" より小さいことを確認します。

詳細については、MongoDB Server マニュアルの「照合制限」を参照してください。

データ型: boolean
デフォルト: false

NumericOrdering

alternate

(任意) ドライバーが比較の基準文字として空白と句読点を考慮するかどうかを指定します。

データ型: CollationAlternate
デフォルト: CollationAlternate.NonIgnorable (空白と句読点は基準文字と見なされます)

Alternate

maxVariable

(任意) alternateCollationAlternate.Shifted引数が

の場合にドライバーが無視可能と見なす文字を指定します。データ型: CollectionMaxVvariable
デフォルト:CollationMaxVariable.Punctuation (ドライバーは句読点とスペースを無視します)

MaxVariable

normalization



(任意)ドライバーが必要に応じてテキストを正規化するかどうかを指定します。ほとんどのテキストは正規化を必要としません。正規化の詳細については、 ICU

のドキュメントを参照してください。データ型:boolean
デフォルト:false

Normalization

backwards

(任意) 発音区別符号を含む string を、string の後ろから前にソートするかどうかを指定します。

データ型: boolean
デフォルト: false

Backwards

照合の詳細については、 MongoDB Serverマニュアルの 照合 ページを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。