MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Élément de tableau de mise à jour Mongo (pilote .NET 2.0)

Il m'a fallu un certain temps pour comprendre cela car il ne semble pas être mentionné dans la documentation officielle (ou ailleurs). J'ai cependant trouvé ceci sur leur outil de suivi des problèmes, qui explique comment utiliser l'opérateur positionnel $ avec le pilote C# 2.0.

Cela devrait faire ce que vous voulez :

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

Notez que votre Item.Single() la clause a été remplacée par Item.Any() et déplacé vers la définition du filtre.

[-1] ou .ElementAt(-1) est apparemment traité spécialement (en fait tout <0) et sera remplacé par l'opérateur positionnel $ .

Ce qui précède sera traduit en cette requête :

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