MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Insérer ou mettre à jour en toute sécurité un sous-document dans MongoDB

Avez-vous regardé le AddToSet méthode, si vous l'utilisez en combinaison avec la fonction de mise à jour au lieu de celle de remplacement, elle devrait garder un meilleur contrôle de votre atomicité.

var updateBuilder = Builders<Item>.Update.AddToSet(items => items.SubItems, new SubItem());

collection.UpdateOne(itemFilter, updateBuilder);

Comme dans votre cas.

    public Task Save(string itemId, SubItem subItem)
    {
        var itemFilter = Builders<Item>.Filter.Eq(v => v.Id, itemId);
        var collection = _db.GetCollection<Item>("Items");

        var updateBuilder = Builders<Item>.Update.AddToSet(items => items.SubItems, subItem);

        collection.UpdateOneAsync(itemFilter, updateBuilder, new UpdateOptions() { IsUpsert = true }).Wait();
    }