MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

C # MongoDB - Como adicionar e remover itens para vários elementos de matriz aninhada?


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