sql >> Databáze >  >> NoSQL >> MongoDB

Mongo update element pole (.NET driver 2.0)

Chvíli mi trvalo, než jsem na to přišel, protože se nezdá, že by to bylo zmíněno v žádné oficiální dokumentaci (ani nikde jinde). Našel jsem to však na jejich nástroji pro sledování problémů, který vysvětluje, jak používat poziční operátor $ s ovladačem C# 2.0.

To by mělo dělat, co chcete:

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

Všimněte si, že vaše Item.Single() klauzule byla změněna na Item.Any() a přesunuli se do definice filtru.

[-1] nebo .ElementAt(-1) je zjevně zpracováno speciálně (ve skutečnosti vše <0) a bude nahrazeno pozičním operátorem $ .

Výše uvedené bude převedeno na tento dotaz:

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


  1. Počítání v úložišti Spring Data MongoDB

  2. Jak nahradit podřetězec v dokumentu mongodb

  3. Aktualizujte vnořené vnořené dokumenty v MongoDB pomocí arrayFilters

  4. Je možné obsadit MongoDB-Query?