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

Elemento de matriz de atualização do Mongo (driver .NET 2.0)


Demorei um pouco para descobrir isso, pois não parece ser mencionado em nenhuma documentação oficial (ou em qualquer outro lugar). No entanto, encontrei isso no rastreador de problemas, que explica como usar o operador posicional $ com o driver C# 2.0.

Isso deve fazer o que você quer:
public void UpdateItemTitle(string agendaId, string itemId, string title){
    var filter = Builders<TempAgenda>.Filter.Where(x => x.AgendaId == agendaId && x.Items.Any(i => i.Id == itemId));
    var update = Builders<TempAgenda>.Update.Set(x => x.Items[-1].Title, title);
    var result = _collection.UpdateOneAsync(filter, update).Result;
}

Observe que seu Item.Single() cláusula foi alterada para Item.Any() e movido para a definição de filtro.

[-1] ou .ElementAt(-1) aparentemente é tratado de forma especial (na verdade tudo <0) e será substituído pelo operador posicional $ .

O acima será traduzido para esta consulta:
db.Agenda.update({ AgendaId: 1, Items.Id: 1 }, { $set: { Items.$.Title: "hello" } })