sql >> Base de Datos >  >> NoSQL >> MongoDB

C # MongoDB:¿cómo agregar y eliminar elementos en múltiples elementos de matriz anidados?

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