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

Mongo update array element (.NET driver 2.0)

Det tog mig et stykke tid at finde ud af dette, da det ikke ser ud til at være nævnt i nogen af ​​den officielle dokumentation (eller andre steder). Jeg fandt dog dette på deres problemsporing, som forklarer, hvordan man bruger positionsoperatoren $ med C# 2.0-driveren.

Dette skulle gøre, hvad du vil:

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

Bemærk, at din Item.Single() klausulen er blevet ændret til Item.Any() og flyttede til filterdefinitionen.

[-1] eller .ElementAt(-1) behandles tilsyneladende specielt (faktisk alt <0) og vil blive erstattet med positionsoperatoren $ .

Ovenstående vil blive oversat til denne forespørgsel:

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


  1. MongoDB som køtjeneste?

  2. Redis:Vis databasestørrelse/størrelse for nøgler

  3. Hvordan bruger man Elasticsearch med MongoDB?

  4. Meteor.js implementere til example.com eller www.example.com?