sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo update array element (.NET drivrutin 2.0)

Det tog ett tag för mig att ta reda på detta eftersom det inte verkar nämnas i någon av den officiella dokumentationen (eller någon annanstans). Jag hittade dock detta på deras problemspårare, som förklarar hur man använder positionsoperatorn $ med C# 2.0-drivrutinen.

Detta bör göra vad du vill:

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

Lägg märke till att din Item.Single() klausulen har ändrats till Item.Any() och flyttade till filterdefinitionen.

[-1] eller .ElementAt(-1) behandlas tydligen speciellt (egentligen allt <0) och kommer att ersättas med positionsoperatorn $ .

Ovanstående kommer att översättas till denna fråga:

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


  1. De 10 bästa MongoDB-värdplattformarna

  2. Få alla fältnamn i en mongodb-samling?

  3. 7 sätt att räkna dokument i MongoDB

  4. MongoDB $gte Aggregation Pipeline Operator