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

Upsert Dictionary v MongoDb

Můžete projít všechny vlastnosti, které chcete aktualizovat/vložit, a udělat to pro každou vlastnost:

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

Předchozí verze odpovědi s několika aktualizacemi:

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

Všimněte si, že tím pouze přidáte nový klíč/hodnoty nebo aktualizujete existující, nic tím neodeberete.




  1. Nejmodernější správa databáze:ClusterControl – Průvodce

  2. MongoDB $binarySize

  3. db.getUser v node.js mongodb

  4. Jaké je chování nastavení časového limitu při provádění agregačního kanálu v ovladači MongoDB Java Driver?