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

更新 1

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

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

  • UpdateOne(): 単一のドキュメント内の 1 つ以上のフィールドを更新します。

  • UpdateOneAsync(): UpdateOne() の非同期バージョン。

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

注意

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

このページのメソッドの多くには、複数のオーバーロードがあります。 このガイドの例では、各メソッドの 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#ドライバーを使い始める 」を参照してください。

UpdateOne() メソッドと UpdateOneAsync() メソッドは次のパラメータを受け入れます。

Parameter
説明

filter

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

データ型: FilterDefinition

update

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

データ型: UpdateDefinition<TDocument>

options

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

データ型: UpdateOptions

cancellationToken

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

データ型CancellationToken

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

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

Parameter
説明

updates

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

データ型: UpdateDefinition<TDocument>[]

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

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

データ型: PipelineDefinition<TDocument, TDocument>

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

注意

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

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

UpdateOne() メソッドと UpdateOneAsync() メソッドは、オプションとして 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

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

Locale

caseLevel

(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

CaseLevel

caseFirst

(Optional) Specifies the sort order of case differences during tertiary level comparisons.

Default: CollationCaseFirst.Off

CaseFirst

strength

(Optional) Specifies the level of comparison to perform, as defined in the ICU documentation.

Default: CollationStrength.Tertiary

Strength

numericOrdering

(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

NumericOrdering

alternate

(Optional) Specifies whether the driver considers whitespace and punctuation as base characters for purposes of comparison.

Default: CollationAlternate.NonIgnorable (spaces and punctuation are considered base characters)

Alternate

maxVariable

(Optional) Specifies which characters the driver considers ignorable when the alternate argument is CollationAlternate.Shifted.

Default: CollationMaxVariable.Punctuation (the driver ignores punctuation and spaces)

MaxVariable

normalization

(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

Normalization

backwards

(Optional) Specifies whether strings containing diacritics sort from the back of the string to the front.

Data Type: boolean
Default: false

Backwards

照合の詳細については、 MongoDB Serverマニュアルの 照合 ページを参照してください。

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

プロパティ
説明

IsAcknowledged

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

データ型: bool

IsModifiedCountAvailable

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

データ型: bool

MatchedCount

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

データ型: long

ModifiedCount

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

データ型: long

UpsertedId

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

データ型: BsonValue

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

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

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

戻る

カーソルからのデータへのアクセス

項目一覧