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);