AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

多数更新

このガイドでは、 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クラスターを作成し、このサンプルデータをロードする方法については、 .NET/ C#ドライバーを使い始める を参照してください。

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

結果をソートするときに使用する言語照合の種類を指定します。詳細については、このページの「 照合 」セクションを参照してください。

データ型: 照合

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

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

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

Parameter
説明
クラスプロパティ

locale

Unicode 用の国際コンポーネント(ICU)ロケールを指定します。サポートされているロケールのリストについては、 MongoDB Serverマニュアルの 「照合ロケールとデフォルト パラメーター」 を参照してください。単純なバイナリ比較を使用する場合は、

Collation.SimpleCollationlocale静的プロパティを使用して、 が"simple" に設定されている
オブジェクトを返します。データ型:string

Locale

caseLevel

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

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

strengthCollationStrength.Primary の場合、ドライバーは基本文字と大文字と小文字を比較します。
- がstrength CollationStrength.Secondaryの場合、ドライバーは基本文字、発音区別符号、その他のセカンダリ レベルの相違、大文字と小文字を比較します。
-strength がその他の値の場合、この引数は無視されます。この引数が

falseの場合、ドライバーは強度レベルPrimary またはSecondary

での大文字と小文字の比較を含めません。データ型:boolean
デフォルト:false

CaseLevel

caseFirst



(任意)三次レベルの比較中に、大文字と小文字の相違のソート順序を指定します。データ型: CollationCateFirst
デフォルト:CollationCaseFirst.Off

CaseFirst

strength

(任意) ICU

ドキュメントで定義されている比較のレベルを指定します。データ型: 照合強度
デフォルト:CollationStrength.Tertiary

Strength

numericOrdering

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

trueの場合、ドライバーは数字の string を数値として比較します。例、string "10 " と "2 " を比較する場合、ドライバーはその値を10 と2 として処理し、 が大きいことが検出されます。この引数が10

falseまたは除外されている場合、ドライバーは数字の string を string として比較します。例、string "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マニュアルの 照合 ページを参照してください。

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

プロパティ
説明

IsAcknowledged

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

データ型: bool

IsModifiedCountAvailable

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

データ型: bool

MatchedCount

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

データ型: long

ModifiedCount

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

データ型: long

UpsertedId

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

データ型: BsonValue

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

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

更新操作の実行可能な例については、次の使用例を参照してください。

UpdateOne()

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

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