Overview
このガイドでは、 MongoDB .NET/ C#ドライバーを使用して複数のドキュメントの 値を更新する方法を学習できます。
.NET/ C#ドライバーは、 値を更新するための次のメソッドを提供します。
UpdateMany(): 複数のドキュメントの 1 つ以上のフィールドを更新します。UpdateManyAsync():UpdateMany()の非同期バージョン。
次のセクションでは、これらの方法について詳しく説明します。
注意
メソッドのオーバーロード
このページのメソッドの多くには、複数のオーバーロードがあります。このガイドの例では、各メソッドの 1 つの定義のみを示します。利用可能なオーバーロードの詳細については、APIドキュメントを参照してください。
サンプル データ
このガイドの例では、 sample_restaurantsデータベースのrestaurantsコレクションを使用します。 このコレクションのドキュメントでは、次のRestaurant 、 Address 、 GradeEntryクラスをモデルとして使用します。
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [] public double[] Coordinates { get; set; } public string Street { get; set; } [] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
注意
restaurantsコレクションのドキュメントは、スニペット ケースの命名規則を使用します。このガイドの例では、ConventionPack を使用してコレクション内のフィールドをパスカル ケースに逆シリアル化し、Restaurantクラスのプロパティにマップします。
カスタム直列化について詳しくは、「カスタム直列化」を参照してください。
このコレクションは、Atlas が提供するサンプルデータセットから構成されています。無料のMongoDBクラスターを作成し、このサンプルデータをロードする方法については、 .NET/ C#ドライバーを使い始める を参照してください。
メソッドとパラメーター
UpdateMany() メソッドと UpdateManyAsync() メソッドは次のパラメータを受け入れます。
Parameter | 説明 |
|---|---|
| 更新するドキュメントを指定する データ型: FilterDefinition |
|
|
|
データ型: UpdateOptions |
| 任意。操作 をキャンセルするために使用できるトークン。 データ型: |
複数の値の更新
UpdateMany() メソッドと UpdateManyAsync() メソッドはそれぞれ 1 つの UpdateDefinitionオブジェクトのみを受け入れます。 次のセクションでは、1 回のメソッド呼び出しで複数の値をアップデートする方法について説明します。
更新の定義を組み合わせた
Builders.Update.Combine() メソッドを使用すると、複数の UpdateDefinition オブジェクトを組み合わせることができます。 このメソッドは次のパラメーターを受け入れます:
Parameter | 説明 |
|---|---|
| 組み合わせる更新定義の配列。 データ型: |
Combine() メソッドは、複数のアップデート操作を定義する単一の UpdateDefinitionオブジェクトを返します。
次のコード例では、 メソッドを使用してCombine() $set操作と $unset操作を組み合わせています。
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); _restaurantsCollection.UpdateMany(filter, combinedUpdate);
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); await _restaurantsCollection.UpdateManyAsync(filter, combinedUpdate);
更新パイプライン
更新パイプラインを作成するには、Builders.Update.Pipeline() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:
Parameter | 説明 |
|---|---|
| 更新パイプラインを表す データ型: |
Pipeline() メソッドは、複数の集計ステージを定義する単一の UpdateDefinitionオブジェクトを返します。
次のコード例では、 メソッドを使用してPipeline() $set操作と $unset操作を組み合わせています。
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); _restaurantsCollection.UpdateMany(filter, updatePipeline);
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); await _restaurantsCollection.UpdateManyAsync(filter, updatePipeline);
設定オプション
UpdateMany() メソッドと UpdateManyAsync() メソッドは、オプションとして UpdateOptionsオブジェクトをパラメーターとして受け入れます。 この引数を使用して、更新操作を構成できます。
UpdateOptionsクラスには、次のプロパティが含まれています。
プロパティ | 説明 | ||||
|---|---|---|---|---|---|
| 配列フィールドのアップデート操作でどの配列要素を変更するかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 | ||||
| アップデート操作がドキュメント検証をバイパスするかどうかを指定します。 これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。 スキーマ検証の詳細については、 MongoDB Serverマニュアルを参照してください。 データ型: | ||||
| |||||
| 操作のユーザー指定のコメントを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonValue | ||||
| ドキュメントをスキャンするために使用するインデックスを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonValue | ||||
| クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: | ||||
| クエリで複数のドキュメントが選択された場合に、その操作で更新するドキュメントを決定します。更新操作では指定されたソート順の最初のドキュメントが更新されるためです。このオプションを設定するには、次のコードに示すように、データをモデル化するジェネリック型を使用する データ型: | ||||
| letドキュメント を取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonDocument |
照合
操作の照合を構成するには、照合クラスのインスタンスを作成します。
次の表では、Collation コンストラクターが受け入れるパラメーターを説明しています。また、各設定の値を読み取るために使用できる対応するクラスプロパティも一覧表示されます。
Parameter | 説明 | クラスプロパティ |
|---|---|---|
| Unicode 用の国際コンポーネント(ICU)ロケールを指定します。サポートされているロケールのリストについては、 MongoDB Serverマニュアルの 「照合ロケールとデフォルト パラメーター」 を参照してください。単純なバイナリ比較を使用する場合は、 |
|
| (任意)大文字と小文字の比較を含めるかどうかを指定します。この引数が |
|
|
|
|
|
| |
| (任意)ドライバーが数字の string を数値として比較するかどうかを指定します。この引数が |
|
| (任意) |
|
| (任意) |
|
|
|
|
| (任意)発音区別符号を含む string を、string |
|
照合の詳細については、 MongoDB Serverマニュアルの 照合 ページを参照してください。
戻り値
UpdateMany() メソッドは UpdateResult を返し、UpdateManyAsync() メソッドは Task<UpdateResult>オブジェクトを返します。 UpdateResultクラスには次のプロパティが含まれています。
プロパティ | 説明 |
|---|---|
| アップデート操作が MongoDB によって確認されたかどうかを示します。 データ型: |
|
データ型: |
| アップデートされたかどうかにかかわらず、クエリフィルターに一致したドキュメントの数。 データ型: |
| 更新操作によって更新されたドキュメントの数。 データ型: |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。 データ型: BsonValue |
詳細情報
このページには、 UpdateManyAsync()メソッドを使用してデータを変更する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。
ラボを開始するには、ページ上部の [ Open Interactive Tutorial ] ボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( ⛶ )をクリックします。
更新操作の実行可能な例については、次の使用例を参照してください。
クエリフィルターの作成の詳細については、クエリフィルターの作成ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドやタイプの詳細については、次の API ドキュメントを参照してください。