Docs Menu
Docs Home
/ / /
C#/.NET ドライバー
/ / /

多数更新

このガイドでは、 MongoDB .NET/ C#ドライバーを使用して複数のドキュメントの 値を更新する方法を学習できます。

.NET/ C#ドライバーは、 値を更新するための次のメソッドを提供します。

  • UpdateMany(): 複数のドキュメントの 1 つ以上のフィールドを更新します。

  • UpdateManyAsync(): UpdateMany() の非同期バージョン。

次のセクションでは、これらの方法について詳しく説明します。

注意

メソッドのオーバーロード

このページのメソッドの多くには、複数のオーバーロードがあります。 このガイドの例では、各メソッドの 1 つの定義のみを示します。 利用可能なオーバーロードの詳細については、 APIドキュメントを参照してください。

このガイドの例では、 sample_restaurantsデータベースのrestaurantsコレクションを使用します。 このコレクションのドキュメントでは、次のRestaurantAddressGradeEntryクラスをモデルとして使用します。

public class Restaurant
{
public ObjectId Id { get; set; }
public string Name { get; set; }
[BsonElement("restaurant_id")]
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; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
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
説明

filter

更新するドキュメントを指定する FilterDefinitionクラスのインスタンス。 クエリフィルターの作成方法については、「 クエリの指定 」を参照してください。

データ型: FilterDefinition

update

UpdateDefinitionクラスのインスタンス。このオブジェクトは、 更新操作の種類、更新するフィールド、および各フィールドの新しい値を指定します。UpdateDefinitionオブジェクトの作成方法については、「多くのドキュメントのフィールドを更新」および「多くのドキュメントの配列を更新」を参照してください。

データ型: UpdateDefinition<TDocument>

options

任意。 更新操作の構成を指定する UpdateOptionsクラスのインスタンス。デフォルト値は null です。利用可能なオプションのリストについては、「構成オプション」 を参照してください。

データ型: UpdateOptions

cancellationToken

任意。操作 をキャンセルするために使用できるトークン。

データ型CancellationToken

UpdateMany() メソッドと UpdateManyAsync() メソッドはそれぞれ 1 つの UpdateDefinitionオブジェクトのみを受け入れます。 次のセクションでは、1 回のメソッド呼び出しで複数の値をアップデートする方法について説明します。

Builders.Update.Combine() メソッドを使用すると、複数の UpdateDefinition オブジェクトを組み合わせることができます。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

updates

組み合わせる更新定義の配列。

データ型: UpdateDefinition<TDocument>[]

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

更新パイプラインを表す PipelineDefinitionインスタンス。 PipelineDefinitionオブジェクトを作成するには、実行するアップデート操作ごとにBSONドキュメントを作成し、それらのドキュメントを PipelineDefinition.Create() メソッドに渡します。

データ型: PipelineDefinition<TDocument, TDocument>

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

注意

サポートされていない操作

更新パイプラインはすべての更新操作をサポートしているわけではありませんが、他の更新定義にない特定の集計ステージをサポートしています。 パイプラインでサポートされている更新操作のリストについては、 MongoDB Serverマニュアルの「 集計パイプラインによる更新 」を参照してください。

UpdateMany() メソッドと UpdateManyAsync() メソッドは、オプションとして UpdateOptionsオブジェクトをパラメーターとして受け入れます。 この引数を使用して、更新操作を構成できます。

UpdateOptionsクラスには、次のプロパティが含まれています。

プロパティ
説明

ArrayFilters

配列フィールドのアップデート操作でどの配列要素を変更するかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。

データ型: IEnumerable[ArrayFilterDefinition]>

BypassDocumentValidation

アップデート操作がドキュメント検証をバイパスするかどうかを指定します。 これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。 スキーマ検証の詳細については、 MongoDB Serverマニュアルを参照してください。

データ型: bool?

Collation

結果をソートするときに使用する言語照合の種類を指定します。 照合の詳細については、 MongoDB Serverマニュアルを参照してください。

データ型: 照合

Comment

操作のユーザー指定のコメントを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。

データ型: BsonValue

Hint

ドキュメントをスキャンするために使用するインデックスを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。

データ型: BsonValue

IsUpsert

クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。

データ型: bool

Sort

クエリで複数のドキュメントが選択された場合に、その操作で更新するドキュメントを決定します。更新操作では指定されたソート順の最初のドキュメントが更新されるためです。このオプションを設定するには、次のコードに示すように、データをモデル化するジェネリック型を使用する UpdateOptions<T>インスタンスをインスタンス化する必要があります。

var options = new UpdateOptions<Restaurant>
{
Sort = Builders<Restaurant>.Sort.Ascending(r => r.Name)
};

データ型: SortDefinition<T>

Let

letドキュメント を取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。

データ型: BsonDocument

UpdateMany() メソッドは UpdateResult を返し、UpdateManyAsync() メソッドは Task<UpdateResult>オブジェクトを返します。 UpdateResultクラスには次のプロパティが含まれています。

プロパティ
説明

IsAcknowledged

アップデート操作が MongoDB によって確認されたかどうかを示します。

データ型: bool

IsModifiedCountAvailable

UpdateResult で更新レコードの数を読み取れるかどうかを示します。

データ型: bool

MatchedCount

アップデートされたかどうかにかかわらず、クエリフィルターに一致したドキュメントの数。

データ型: long

ModifiedCount

更新操作によって更新されたドキュメントの数。

データ型: long

UpsertedId

ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。

データ型: BsonValue

このページには、 UpdateManyAsync()メソッドを使用してデータを変更する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。

ラボを開始するには、ページ上部の [ Open Interactive Tutorialボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( )をクリックします。

更新操作の実行可能な例については、「 多数のドキュメントの更新 」ページを参照してください。

クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。

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

戻る

配列

項目一覧