AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

1 つのドキュメントのフィールドの更新

このページでは、 MongoDB .NET/ C#ドライバーを使用して 1 つのMongoDBドキュメントのフィールドを更新する方法を学習できます。 このページでは、フィールドで実行するアップデート操作を指定する UpdateDefinition<TDocument> オブジェクトを作成する方法について説明します。 これらのオブジェクトを、Update One ページで説明されているアップデート メソッドに渡すことができます。

The .NET/C# Driver supports the field update operators described in the MongoDB Server manual. To specify an update operation, call the corresponding method from the Builders.Update property. The following sections describe these methods in more detail.

注意

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

このページのメソッドの多くには、複数のオーバーロードがあります。このガイドの例では、各メソッドの 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 クラスターを無料で作成して、このサンプル データをロードする方法については、クイック スタートを参照してください。

フィールドの値を特定の量ずつ増加させるには、Builders.Update.Inc() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

インクリメントするフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

value

フィールドを増加させる量。

データ型: TField

次のコード例では、Inc() メソッドを使用して、一致するドキュメント内の Grades 配列の最初の GradeEntryオブジェクトで、Score の値を 2 ずつ増加させます。

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Inc(restaurant => restaurant.Grades[0].Score, 2);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Inc(restaurant => restaurant.Grades[0].Score, 2);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

フィールドの値に特定の量を乗算するには、Builders.Update.Mul() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

更新するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

value

フィールドに乗じる量。

データ型: TField

次のコード例では、Mul() メソッドを使用して、一致するドキュメント内の Grades 配列の最初の GradeEntryオブジェクトで、Score の値に 1.25 を乗算します。

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Mul(restaurant => restaurant.Grades[0].Score, 1.25f);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Mul(restaurant => restaurant.Grades[0].Score, 1.25f);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

フィールド の名前を変更するには、Builders.Update.Rename() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

名前を変更するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

newName

フィールドの新しい名前。

データ型: string

次のコード例では、Rename() メソッドを使用して、一致するドキュメントの Addressフィールドの名前を location に変更します。

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Rename(restaurant => restaurant.Address, "location");
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Rename(restaurant => restaurant.Address, "location");
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

注意

上記のコード例ではフィールド名 location が使用されています。これは、Restaurantクラスのプロパティ名ではなく、 MongoDB内のフィールド名の命名スキームと一致するためです。

フィールドの値を特定の値に設定するには、Builders.Update.Set() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

更新するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

value

フィールドに設定する値。

データ型: TField

次のコード例では、Set() メソッドを使用して、一致するドキュメントの recommendedフィールドの名前を true に変更します。

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Set("recommended", true);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Set("recommended", true);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

注意

上記のコード例ではフィールド名 recommended が使用されています。これは、Restaurantクラスのプロパティ名ではなく、 MongoDB内のフィールド名の命名スキームと一致するためです。

フィールドの値を指定した値に更新するには、指定された値がフィールドの現在の値より大きい場合にのみ、 Builders.Update.Max()メソッドを呼び出します。このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

更新するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

value

フィールドに設定する値。

データ型: TField

フィールドの値を指定した値に更新するには、指定された値がフィールドの現在の値より小さい場合にのみ、Builders.Update.Min() メソッドを呼び出します。このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

更新するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

value

フィールドに設定する値。

データ型: TField

次のコード例では、Max() メソッドを使用して、最初の GradeEntryオブジェクトの Scoreフィールドを、20 と一致するドキュメント内の現在の値より大きい方に設定します。

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Max(restaurant => restaurant.Grades[0].Score, 20);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Max(restaurant => restaurant.Grades[0].Score, 20);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

ドキュメントが 同じ操作でアップサートされた場合にのみフィールドの値を設定するには、Builders.Update.SetOnInsert() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

更新するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

value

フィールドに設定する値。

データ型: TField

次のコード例では、SetOnInsert() メソッドを使用して、一致するドキュメントの recommendedフィールドを true に設定します。

var filter = Builders<Restaurant>.Filter.Eq("name", "Patty's Pies");
var update = Builders<Restaurant>.Update
.SetOnInsert("recommended", true);
var result = _restaurantsCollection.UpdateOne(
filter, update, new UpdateOptions { IsUpsert = true }
);
var filter = Builders<Restaurant>.Filter.Eq("name", "Patty's Pies");
var update = Builders<Restaurant>.Update
.SetOnInsert("recommended", true);
var result = await _restaurantsCollection.UpdateOneAsync(
filter, update, new UpdateOptions { IsUpsert = true }
);

注意

上記のコード例ではフィールド名 recommended が使用されています。これは、Restaurantクラスのプロパティ名ではなく、 MongoDB内のフィールド名の命名スキームと一致するためです。

ドキュメントのアップサートの詳細については、 Update Oneガイドの 「構成オプション」 を参照してください。

フィールドの値を現在の日付と時刻に設定するには、Builders.Update.CurrentDate() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

更新するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

type

UpdateDefinitionCurrentDateType列挙で定義される日付と時刻の形式。 デフォルト値は null です。

データ型: UpdateDefinitionCurrentDateType?

次のコード例では、CurrentDate() メソッドを使用して、最初の GradeEntryオブジェクトの Dateフィールドを、一致するドキュメント内の現在の日付に更新します。

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.CurrentDate(restaurant => restaurant.Grades[0].Date);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.CurrentDate(restaurant => restaurant.Grades[0].Date);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

ドキュメントからフィールドを削除するには、Builders.Update.Unset() メソッドを呼び出します。 このメソッドは次のパラメーターを受け入れます:

Parameter
説明

field

削除するフィールドを指定する式。

データ型: Expression<Func<TDocument, TField>>

次のコード例では、Unset() メソッドを使用して、一致するドキュメントの Cuisineフィールドを削除します。

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Unset(restaurant => restaurant.Cuisine);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Unset(restaurant => restaurant.Cuisine);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

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