sql >> Databasteknik >  >> NoSQL >> MongoDB

Upsert Dictionary i MongoDb

Du kan gå igenom alla egenskaper du vill uppdatera/infoga och göra det för varje egenskap:

UpdateDefinition<Site> upsert = null;
if (properties.Any())
{
    var firstprop = properties.First();
    upsert = Builders<Site>.Update.Set(nameof(Site.Properties) + "." + firstprop.Key, 
                               firstprop.Value);

    foreach (var updateVal in properties.Skip(1))
    {
        upsert = upsert.Set(nameof(Site.Properties) + "." + updateVal.Key, 
                                          updateVal.Value);
    }

    collection.UpdateOne(r => r.Id == "YourId", upsert, 
                                               new UpdateOptions { IsUpsert = true });
}

Tidigare version av svaret, med flera uppdateringar:

foreach (var updateVal in properties)
{
    collection.UpdateOne(r => r.Id == "YourId", 
        Builders<Site>.Update.Set( nameof(Site.Properties)+ "." + updateVal.Key, 
                                   updateVal.Value), 
                                   new UpdateOptions { IsUpsert = true});
}

Observera att det bara kommer att lägga till nya nyckel/värden eller uppdatera befintliga, detta tar inte bort någonting.




  1. mongodb show dbs listDatabaser misslyckades

  2. Använda flera Mongodb-databaser med Meteor.js

  3. vad är det verkliga syftet med $ref (DBRef) i MongoDb

  4. MongoDB Group och subtrahera värden från olika dokument