Puede probar algo como a continuación en el controlador 2.5 con la versión 3.6.
Encuentra el documento con filter criterios y update que incluye el nuevo identificador posicional
para actualizar varios elementos en la matriz dentro de UpdateOne método.
$[]
actualiza todas las Tags matrices para incluir un nuevo elemento en todas las Categories formación. Actúa como marcador de posición para actualizar todos los elementos de la matriz.
Empujar
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Tirar
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Información adicional:
Puede configurar los ArrayFilters opciones en UpdateOptions para aplicar criterios de consulta en una matriz anidada para controlar qué elementos actualizar.
Por ejemplo, para actualizar todas las categorías en la matriz de etiquetas donde cada etiqueta tiene Name nombre.
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);