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

Elemento de matriz de actualización de Mongo (controlador .NET 2.0)

Me tomó un tiempo darme cuenta de esto, ya que no parece mencionarse en ninguna documentación oficial (ni en ningún otro lugar). Sin embargo, encontré esto en su rastreador de problemas, que explica cómo usar el operador posicional $ con el controlador C# 2.0.

Esto debería hacer lo que quieras:

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 su Item.Single() la cláusula se ha cambiado a Item.Any() y movido a la definición de filtro.

[-1] o .ElementAt(-1) aparentemente se trata de manera especial (en realidad todo <0) y se reemplazará con el operador posicional $ .

Lo anterior se traducirá a esta consulta:

db.Agenda.update({ AgendaId: 1, Items.Id: 1 }, { $set: { Items.$.Title: "hello" } })