Можете да опитате нещо като по-долу в драйвер 2.5 с версия 3.6.
Намира документа с 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
име.
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);