UpdateOneAsync
работает так же, как update
с multi: true
в оболочке Mongo. Таким образом, вы можете указать условие фильтрации и операцию обновления, и это повлияет на несколько документов. Например, чтобы увеличить все поля a
, где a
больше 10
, вы можете использовать этот метод:
var builder = Builders<SampleClass>.Update;
await myCollection.UpdateManyAsync(x => x.a > 10, builder.Inc(x => x.a, 1));
Полагаю, вы хотите заменить несколько документов. Это может быть достигнуто с помощью метода bulkWrite . Если вам нужен универсальный метод в C #, вы можете ввести некоторый интерфейс маркера для создания части фильтра операции замены:
public interface IMongoIdentity
{
ObjectId Id { get; set; }
}
Затем вы можете добавить общий класс в ваш класс и использовать BuikWrite
в .NET, как показано ниже:
class YourRepository<T> where T : IMongoIdentity
{
IMongoCollection<T> collection;
public async Task UpdateManyAsync(IEnumerable<T> entities)
{
var updates = new List<WriteModel<T>>();
var filterBuilder = Builders<T>.Filter;
foreach (var doc in entities)
{
var filter = filterBuilder.Where(x => x.Id == doc.Id);
updates.Add(new ReplaceOneModel<T>(filter, doc));
}
await collection.BulkWriteAsync(updates);
}
}