Tom*_*eck 5 mongodb mongodb-query mongodb-.net-driver
我有以下方法来更新 MongoDB 中的文档:
public async Task UpdateAsync(T entity)
{
await _collection.ReplaceOneAsync(filter => filter.Id == entity.Id, entity);
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常 - 我只是想知道是否有人有这个UpdateManyAsync函数如何工作的例子:
public async Task UpdateManyAsync(IEnumerable<T> entities)
{
await _collection.UpdateManyAsync(); // What are the parameters here
}
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏!
UpdateOneAsyncupdate与multi: trueMongo shell 中的工作方式相同。所以你可以指定过滤条件和更新操作,它会影响多个文档。例如,要增加大于您可以使用此方法的所有a字段:a10
var builder = Builders<SampleClass>.Update;
await myCollection.UpdateManyAsync(x => x.a > 10, builder.Inc(x => x.a, 1));
Run Code Online (Sandbox Code Playgroud)
我猜您想替换多个文档。这可以使用bulkWrite方法来实现。如果您需要 C# 中的泛型方法,那么您可以引入某种标记接口来构建替换操作的过滤器部分:
public interface IMongoIdentity
{
ObjectId Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以向你的类添加通用常量并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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4770 次 |
| 最近记录: |