Você pode tentar algo como abaixo no driver 2.5 com a versão 3.6.
Encontra o documento com
filter critérios e update que inclui o novo identificador posicional
para atualizar vários elementos na matriz dentro de UpdateOne método. $[] atualiza todas as
Tags arrays para incluir novo item em todas as Categories variedade. Ele atua como um espaço reservado para atualizar todos os elementos na matriz. Empurre
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Push("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Puxar
var filter = Builders<Product>.Filter.Eq("Id", "123");
var update = Builders<Product>.Update.Pull("Tags.$[].Categories", "Item 3");
var result = collection.UpdateOne(filter, update);
Informação adicional:
Você pode definir os
ArrayFilters opções em UpdateOptions para aplicar critérios de consulta na matriz aninhada para controlar quais elementos atualizar. Por exemplo, para atualizar todas as categorias na matriz Tags onde cada tag tem
Name nome. 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);