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

El controlador Mongo C # actualiza un elemento específico en una matriz anidada

Necesita $ operador posicional donde puede especificar la condición a nivel de documento y la condición a nivel de matriz para encontrar un solo elemento anidado en una matriz de un documento en particular. En C# $ el signo está representado por -1 pasado como un índice de su matriz modelo. Prueba:

var col = mydb.GetCollection<Document>("collectionName");
var id = new ObjectId("5babaaf5509f6d342da5abaa");
var elementName = "Car";
var newValue = 2;

var filterBuilder = Builders<Document>.Filter;
var filter = filterBuilder.Eq(x => x.Id, id) &
    filterBuilder.ElemMatch(doc => doc.Elements, el => el.Name == elementName);

var updateBuilder = Builders<Document>.Update;
var update = updateBuilder.Set(doc => doc.Elements[-1].Value, newValue);

Col.UpdateOne(filter, update);