我正在尝试将所选记录从源数据库复制到目标数据库
这是通过以下代码完成的:
//AspnetId For LoginUser
var UserInfoDataList = searchUserInfo.AsQueryable();
string AspNetId = "";
foreach (var item in UserInfoDataList.ToList())
{
AspNetId = item.AspNetId;
}
var AspnetIdQuery = Query.EQ("_id",ObjectId.Parse(AspNetId));
var SerachAspNetUser = AspNetUserCollection.Find(AspnetIdQuery).ToList();
var InsertAspNetUsercollection = destinationDatabase.GetCollection<ApplicationUser>("AspNetUsers");
InsertAspNetUsercollection.InsertBatch(SerachAspNetUser, WriteConcern.Acknowledged);
现在,当我更新源数据库并再次将其同步到目标数据库时,我将如何检测主键冲突,以便我可以在那里使用某种条件或仅更新记录的更改部分。
答案 0 :(得分:0)
首先尝试将您的c#驱动程序更新为2.0,而不是使用ReplaceOne
和upsert = true
,这将检查是否没有文档与过滤器匹配,将会插入新文件
您可以试试这个
var UserInfoData = searchUserInfo.AsQueryable().FirstOrDefault;
string AspNetId = UserInfoData.AspNetId;
var SerachAspNetUser = AspNetUserCollection.AsQueryable().SingleOrDefault(u=>u._id==AspNetId);
var InsertAspNetUsercollection = destinationDatabase.GetCollection<ApplicationUser>("AspNetUsers");
InsertAspNetUsercollection.ReplaceOne(Builders<yourModel>.Eq(u=>u._id,AspNetId),UserInfoData ,new UpdateOptions {IsUpsert = true} );