using System; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; using MongoDbGenericRepository.DataAccess.Base; using MongoDbGenericRepository.Models; namespace MongoDbGenericRepository.DataAccess.Update { /// /// The MongoDb updater. /// public partial class MongoDbUpdater : DataAccessBase, IMongoDbUpdater { /// /// Constructor /// /// public MongoDbUpdater(IMongoDbContext mongoDbContext) : base(mongoDbContext) { } /// public virtual async Task UpdateOneAsync(TDocument modifiedDocument, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var filter = Builders.Filter.Eq("Id", modifiedDocument.Id); var updateRes = await HandlePartitioned(modifiedDocument) .ReplaceOneAsync(filter, modifiedDocument, cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual bool UpdateOne(TDocument modifiedDocument, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var filter = Builders.Filter.Eq("Id", modifiedDocument.Id); var updateRes = HandlePartitioned(modifiedDocument).ReplaceOne(filter, modifiedDocument, cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual async Task UpdateOneAsync( TDocument documentToModify, UpdateDefinition update, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var filter = Builders.Filter.Eq("Id", documentToModify.Id); var updateRes = await HandlePartitioned(documentToModify).UpdateOneAsync(filter, update, cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual bool UpdateOne( TDocument documentToModify, UpdateDefinition update, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var filter = Builders.Filter.Eq("Id", documentToModify.Id); var updateRes = HandlePartitioned(documentToModify).UpdateOne(filter, update, cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual async Task UpdateOneAsync( TDocument documentToModify, Expression> field, TField value, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var filter = Builders.Filter.Eq("Id", documentToModify.Id); var updateRes = await HandlePartitioned(documentToModify).UpdateOneAsync( filter, Builders.Update.Set(field, value), cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual bool UpdateOne( TDocument documentToModify, Expression> field, TField value, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var filter = Builders.Filter.Eq("Id", documentToModify.Id); var updateRes = HandlePartitioned(documentToModify).UpdateOne( filter, Builders.Update.Set(field, value), cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual async Task UpdateOneAsync( FilterDefinition filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection() : GetCollection(partitionKey); var updateRes = await collection.UpdateOneAsync(filter, Builders.Update.Set(field, value), cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual async Task UpdateOneAsync( Expression> filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { return await UpdateOneAsync(Builders.Filter.Where(filter), field, value, partitionKey, cancellationToken); } /// public virtual bool UpdateOne( FilterDefinition filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection() : GetCollection(partitionKey); var updateRes = collection.UpdateOne(filter, Builders.Update.Set(field, value), cancellationToken: cancellationToken); return updateRes.ModifiedCount == 1; } /// public virtual bool UpdateOne( Expression> filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { return UpdateOne(Builders.Filter.Where(filter), field, value, partitionKey, cancellationToken); } /// public virtual async Task UpdateManyAsync( Expression> filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { return await UpdateManyAsync(Builders.Filter.Where(filter), field, value, partitionKey, cancellationToken); } /// public virtual async Task UpdateManyAsync( FilterDefinition filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection() : GetCollection(partitionKey); var updateRes = await collection.UpdateManyAsync(filter, Builders.Update.Set(field, value), cancellationToken: cancellationToken); return updateRes.ModifiedCount; } /// public virtual async Task UpdateManyAsync( Expression> filter, UpdateDefinition update, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { return await UpdateManyAsync(Builders.Filter.Where(filter), update, partitionKey, cancellationToken); } /// public virtual async Task UpdateManyAsync( FilterDefinition filter, UpdateDefinition updateDefinition, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection() : GetCollection(partitionKey); var updateRes = await collection.UpdateManyAsync(filter, updateDefinition, cancellationToken: cancellationToken); return updateRes.ModifiedCount; } /// public virtual long UpdateMany( Expression> filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { return UpdateMany(Builders.Filter.Where(filter), field, value, partitionKey, cancellationToken); } /// public virtual long UpdateMany( FilterDefinition filter, Expression> field, TField value, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection() : GetCollection(partitionKey); var updateRes = collection.UpdateMany(filter, Builders.Update.Set(field, value), cancellationToken: cancellationToken); return updateRes.ModifiedCount; } /// public virtual long UpdateMany( FilterDefinition filter, UpdateDefinition updateDefinition, string partitionKey = null, CancellationToken cancellationToken = default) where TDocument : IDocument where TKey : IEquatable { var collection = string.IsNullOrEmpty(partitionKey) ? GetCollection() : GetCollection(partitionKey); var updateRes = collection.UpdateMany(filter, updateDefinition, cancellationToken: cancellationToken); return updateRes.ModifiedCount; } } }