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クラスターを作成し、このサンプルデータをロードする方法については、 「 .NET/ C#ドライバーを使い始める 」を参照してください。
メソッドとパラメーター
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 のマニュアルを参照してください。 データ型: BsonValue | ||||
| ドキュメントをスキャンするために使用するインデックスを取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonValue | ||||
| クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: | ||||
| クエリで複数のドキュメントが選択された場合に、その操作で更新するドキュメントを決定します。更新操作では指定されたソート順の最初のドキュメントが更新されるためです。このオプションを設定するには、次のコードに示すように、データをモデル化するジェネリック型を使用する
データ型: | ||||
| letドキュメント を取得または設定します。 詳細については、 MongoDB Server のマニュアルを参照してください。 データ型: BsonDocument |
照合
操作の 照合 を構成するには、 照合クラスのインスタンスを作成します。
次の表では、Collation
コンストラクターが受け入れるパラメーターを説明しています。また、各設定の値を読み取るために使用できる対応するクラスプロパティも一覧表示されます。
Parameter | 説明 | クラスプロパティ |
---|---|---|
| Specifies the International Components for Unicode (ICU) locale. For a list of
supported locales,
see Collation Locales and Default Parameters
in the MongoDB Server Manual. If you want to use simple binary comparison, use the Collation.Simple static
property to return a Collation object with the locale set to "simple" .Data Type: string |
|
| (Optional) Specifies whether to include case comparison. When this argument is true , the driver's behavior depends on the value of
the strength argument:- If strength is CollationStrength.Primary , the driver compares base
characters and case.- If strength is CollationStrength.Secondary , the driver compares base
characters, diacritics, other secondary differences, and case.- If strength is any other value, this argument is ignored.When this argument is false , the driver doesn't include case comparison at
strength level Primary or Secondary .Data Type: boolean Default: false |
|
| (Optional) Specifies the sort order of case differences during tertiary level comparisons. Data Type: CollationCaseFirst Default: CollationCaseFirst.Off |
|
| (Optional) Specifies the level of comparison to perform, as defined in the
ICU documentation. Data Type: CollationStrength Default: CollationStrength.Tertiary |
|
| (Optional) Specifies whether the driver compares numeric strings as numbers. If this argument is true , the driver compares numeric strings as numbers.
For example, when comparing the strings "10" and "2", the driver treats the values
as 10 and 2, and finds 10 to be greater.If this argument is false or excluded, the driver compares numeric strings
as strings. For example, when comparing the strings "10" and "2", the driver
compares one character at a time. Because "1" is less than "2", the driver finds
"10" to be less than "2".For more information, see Collation Restrictions
in the MongoDB Server manual. Data Type: boolean Default: false |
|
| (Optional) Specifies whether the driver considers whitespace and punctuation as base
characters for purposes of comparison. Data Type: CollationAlternate Default: CollationAlternate.NonIgnorable (spaces and punctuation are
considered base characters) |
|
| (Optional) Specifies which characters the driver considers ignorable when
the alternate argument is CollationAlternate.Shifted .Data Type: CollationMaxVariable Default: CollationMaxVariable.Punctuation (the driver ignores punctuation
and spaces) |
|
| (Optional) Specifies whether the driver normalizes text as needed. Most text doesn't require normalization. For more information about
normalization, see the ICU documentation. Data Type: boolean Default: false |
|
| (Optional) Specifies whether strings containing diacritics sort from the back of the string
to the front. Data Type: boolean Default: false |
|
照合の詳細については、 MongoDB Serverマニュアルの 照合 ページを参照してください。
戻り値
UpdateOne()
メソッドは UpdateResult
を返し、UpdateOneAsync()
メソッドは Task<UpdateResult>
オブジェクトを返します。 UpdateResult
クラスには次のプロパティが含まれています。
プロパティ | 説明 |
---|---|
| アップデート操作が MongoDB によって確認されたかどうかを示します。 データ型: |
|
データ型: |
| アップデートされたかどうかにかかわらず、クエリフィルターに一致したドキュメントの数。 データ型: |
| 更新操作によって更新されたドキュメントの数。 データ型: |
| ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのID。 データ型: BsonValue |
詳細情報
更新操作の実行可能な例については、次の使用例を参照してください。
クエリフィルターの作成の詳細については、「 クエリフィルターの作成 」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドやタイプの詳細については、次の API ドキュメントを参照してください。