Можете да опитате нещо като по-долу в драйвер 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);