Overview
このガイドでは、 MongoDB .NET/ C#ドライバーを使用して単一のドキュメントの 値を更新する方法を学習できます。
.NET/ C#ドライバーは、 値を更新するための次のメソッドを提供します。
UpdateOne(): 単一のドキュメント内の 1 つ以上のフィールドを更新します。UpdateOneAsync():UpdateOne()の非同期バージョン。
次のセクションでは、これらの方法について詳しく説明します。
注意
メソッドのオーバーロード
このページのメソッドの多くには、複数のオーバーロードがあります。このガイドの例では、各メソッドの 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 クラスターを無料で作成して、このサンプル データをロードする方法については、クイック スタートを参照してください。
メソッドとパラメーター
UpdateOne() メソッドと UpdateOneAsync() メソッドは次のパラメータを受け入れます。
Parameter | 説明 |
|---|---|
| 更新するドキュメントを指定する データ型: FilterDefinition |
|
|
| 任意。更新操作の構成を指定する データ型: UpdateOptions |
| 任意。操作 をキャンセルするために使用できるトークン。 データ型: |
複数の値の更新
UpdateOne() メソッドと UpdateOneAsync() メソッドはそれぞれ 1 つの UpdateDefinitionオブジェクトのみを受け入れます。 次のセクションでは、1 回のメソッド呼び出しで複数の値をアップデートする方法について説明します。
更新の定義を組み合わせた
Builders.Update.Combine() メソッドを使用すると、複数の UpdateDefinition オブジェクトを組み合わせることができます。 このメソッドは次のパラメーターを受け入れます:
Parameter | 説明 |
|---|---|
| 組み合わせる更新定義の配列。 データ型: |
Combine() メソッドは、複数のアップデート操作を定義する単一の UpdateDefinitionオブジェクトを返します。
次のコード例では、 メソッドを使用してCombine() $set操作と $unset操作を組み合わせています。
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); _restaurantsCollection.UpdateOne(filter, combinedUpdate);
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); await _restaurantsCollection.UpdateOneAsync(filter, combinedUpdate);
更新パイプライン
更新パイプラインを作成するには、Builders.Update.Pipeline() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:
Parameter | 説明 |
|---|---|
| 更新パイプラインを表す データ型: |
Pipeline() メソッドは、複数の集計ステージを定義する単一の UpdateDefinitionオブジェクトを返します。
次のコード例では、 メソッドを使用してPipeline() $set操作と $unset操作を組み合わせています。
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); _restaurantsCollection.UpdateOne(filter, updatePipeline);
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); await _restaurantsCollection.UpdateOneAsync(filter, updatePipeline);
設定オプション
UpdateOne() メソッドと UpdateOneAsync() メソッドは、オプションとして UpdateOptionsオブジェクトをパラメーターとして受け入れます。 この引数を使用して、更新操作を構成できます。
UpdateOptionsクラスには、次のプロパティが含まれています。
プロパティ | 説明 |
|---|---|
| 配列フィールドのアップデート操作でどの配列要素を変更するかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 |
| アップデート操作がドキュメント検証をバイパスするかどうかを指定します。 これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。 スキーマ検証の詳細については、 MongoDB Serverマニュアルを参照してください。 データ型: |
| 結果をソートするときに使用する言語照合の種類を指定します。 照合の詳細については、 MongoDB Serverマニュアルを参照してください。 データ型: 照合 |
| 操作のユーザー指定のコメントを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonValue |
| ドキュメントをスキャンするために使用するインデックスを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonValue |
| クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: |
| letドキュメント を取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonDocument |
戻り値
UpdateOne() メソッドは UpdateResult を返し、UpdateOneAsync() メソッドは Task<UpdateResult>オブジェクトを返します。 UpdateResultクラスには次のプロパティが含まれています。
プロパティ | 説明 |
|---|---|
| アップデート操作が MongoDB によって確認されたかどうかを示します。 データ型: |
|
データ型: |
| アップデートされたかどうかにかかわらず、クエリフィルターに一致したドキュメントの数。 データ型: |
| 更新操作によって更新されたドキュメントの数。 データ型: |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。 データ型: BsonValue |
詳細情報
更新操作の実行可能な例については、「 ドキュメントの更新 」ページを参照してください。
クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドやタイプの詳細については、次の API ドキュメントを参照してください。