MongoDb C#驱动程序-基于“upert many”;候选人;钥匙
我有以下类型的mongodb集合:MongoDb C#驱动程序-基于“upert many”;候选人;钥匙,c#,mongodb,mongodb-query,mongodb-.net-driver,C#,Mongodb,Mongodb Query,Mongodb .net Driver,我有以下类型的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组合
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组合(考虑唯一的“候选”键)在一批中升级它们-如果这样的组合存在-什么都不做/更新现有(相同),如果不存在-插入新实体
使用多个UpdateSync调用可以轻松完成此操作:
UpdateOptions() { IsUpsert = true }
var filter = new FilterDefinitionBuilder<Enity>().Where(p => p.Field1 == entiy.Field1 && p.Field2 == entity.Field2);
await UpsertAsync(entity, filter);
UpdateOptions(){IsUpsert=true}
var filter=new FilterDefinitionBuilder()。其中(p=>p.Field1==entiy.Field1&&p.Field2==entity.Field2);
等待UpsertAsync(实体、过滤器);
但这并不是很多/批量操作
我正在浏览API/文档:
- 使用BulkWriteAsync-查看答案
- 使用InsertManyAsync,我看不出如何指定upsert
- 使用UpdateManayAsync时,我如何将字段值组合发送到insert/update
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);
List请求=新列表(entities.Count());
foreach(实体中的var实体)
{
var filter=new FilterDefinitionBuilder()。其中(m=>m.Field1==entity.Field1&&m.Field2==entity.Field2);
var update=new UpdateDefinitionBuilder().Set(m=>m.Field1,entity.Field1).Set(m=>m.Field2,entity.Field2);
var请求=新的UpdateModel(过滤器,更新);
request.IsUpsert=true;
请求。添加(请求);
}
等待收集。BulkWriteAsync(请求);
似乎我需要使用UpdateModel,并为BulkWriteAsync设置Upsert属性。我会试试看,可能会回答我的问题。