3.6バージョンの2.5ドライバーで以下のようなものを試すことができます。
filter
でドキュメントを検索します 基準とupdate
これには、新しい位置識別子
が含まれます UpdateOne
内の配列内の複数の要素を更新します メソッド。
$ []
すべてのTags
を更新します すべてのCategories
に新しいアイテムを含める配列 配列。配列内のすべての要素を更新するためのプレースホルダーとして機能します。
プッシュ
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
引っ張る
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
追加情報:
ArrayFilters
を設定できます UpdateOptions
のオプション ネストされた配列にクエリ条件を適用して、更新する要素を制御します。
たとえば、各タグにName
があるTags配列のすべてのCategoriesを更新します 名前。
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[t].Categories", "Item 3");
var arrayFilters = new List<ArrayFilterDefinition>{ new ArrayFilterDefinition(new BsonDocument("t.Name", "name")) };
var updateOptions = new UpdateOptions({ArrayFilters = arrayFilters});
var result = collection.UpdateOne(filter, update, updateOptions);