我有以下类型的mongodb集合:
public class Entity
{
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public int Field1{ get; set; }
public int Field2{ get; set; }
}
在客户端上,我有一组这样的实体,其中Field1和Field2已设置且没有Id。
我想基于Field1和Field2组合在一个批处理中将它们挂起(认为是唯一的"候选"键) - 如果存在这样的组合 - 什么都不做/更新现有(它是相同的),如果它不存在 - 插入新实体。
可以通过多个UpdateAsync调用轻松完成:
UpdateOptions() { IsUpsert = true }
var filter = new FilterDefinitionBuilder<Enity>().Where(p => p.Field1 == entiy.Field1 && p.Field2 == entity.Field2);
await UpsertAsync(entity, filter);
但这并不是很多/批量操作。
我正在查看API /文档:
答案 0 :(得分:1)
这可以按如下方式完成:
List<UpdateOneModel<Entity>> requests = new List<UpdateOneModel<Entity>>(entities.Count());
foreach (var entity in entities)
{
var filter = new FilterDefinitionBuilder<Entity>().Where(m => m.Field1 == entity.Field1 && m.Field2== entity.Field2);
var update = new UpdateDefinitionBuilder<Entity>().Set(m => m.Field1, entity.Field1).Set(m => m.Field2, entity.Field2);
var request = new UpdateOneModel<Entity>(filter, update);
request.IsUpsert = true;
requests.Add(request);
}
await Collection.BulkWriteAsync(requests);