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 クラスターを無料で作成して、このサンプル データをロードする方法については、クイック スタートを参照してください。
メソッドとパラメーター
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マニュアルを参照してください。 データ型: 照合 | ||||
| 操作のユーザー指定のコメントを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonValue | ||||
| ドキュメントをスキャンするために使用するインデックスを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonValue | ||||
| クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: | ||||
| クエリで複数のドキュメントが選択された場合に、その操作で更新するドキュメントを決定します。更新操作では指定されたソート順の最初のドキュメントが更新されるためです。このオプションを設定するには、次のコードに示すように、データをモデル化するジェネリック型を使用する
データ型: | ||||
| letドキュメント を取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonDocument |
戻り値
UpdateMany()
メソッドは UpdateResult
を返し、UpdateManyAsync()
メソッドは Task<UpdateResult>
オブジェクトを返します。 UpdateResult
クラスには次のプロパティが含まれています。
プロパティ | 説明 |
---|---|
| アップデート操作が MongoDB によって確認されたかどうかを示します。 データ型: |
|
データ型: |
| アップデートされたかどうかにかかわらず、クエリフィルターに一致したドキュメントの数。 データ型: |
| 更新操作によって更新されたドキュメントの数。 データ型: |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。 データ型: BsonValue |
詳細情報
このページには、 UpdateManyAsync()
メソッドを使用してデータを変更する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。
ラボを開始するには、ページ上部の [ Open Interactive Tutorialボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( ⛶ )をクリックします。
更新操作の実行可能な例については、「 多数のドキュメントの更新 」ページを参照してください。
クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドやタイプの詳細については、次の API ドキュメントを参照してください。