MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo-Update-Array-Element (.NET-Treiber 2.0)

Ich habe eine Weile gebraucht, um das herauszufinden, da es anscheinend in keiner der offiziellen Dokumentationen (oder anderswo) erwähnt wird. Ich habe dies jedoch in ihrem Issue-Tracker gefunden, der erklärt, wie der Positionsoperator $ verwendet wird mit dem C# 2.0-Treiber.

Dies sollte tun, was Sie wollen:

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

Beachten Sie, dass Ihre Item.Single() -Klausel wurde in Item.Any() geändert und in die Filterdefinition verschoben.

[-1] oder .ElementAt(-1) wird anscheinend besonders behandelt (eigentlich alles <0) und durch den Positionsoperator $ ersetzt .

Das Obige wird in diese Abfrage übersetzt:

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