MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Elemento dell'array di aggiornamento Mongo (driver .NET 2.0)

Mi ci è voluto un po' per capirlo perché non sembra essere menzionato in nessuna documentazione ufficiale (o altrove). Tuttavia, l'ho trovato sul loro tracker dei problemi, che spiega come utilizzare l'operatore posizionale $ con il driver C# 2.0.

Questo dovrebbe fare quello che vuoi:

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

Nota che il tuo Item.Single() la clausola è stata modificata in Item.Any() e spostato alla definizione del filtro.

[-1] o .ElementAt(-1) è apparentemente trattato in modo speciale (in realtà tutto <0) e verrà sostituito con l'operatore posizionale $ .

Quanto sopra verrà tradotto in questa query:

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