如果发生冲突,如何处理Mongodb中的主键?

时间:2016-06-03 07:54:55

标签: c# asp.net-mvc mongodb mongodb-query mongodb-.net-driver

我正在尝试将所选记录从源数据库复制到目标数据库

这是通过以下代码完成的:

 //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);

现在,当我更新源数据库并再次将其同步到目标数据库时,我将如何检测主键冲突,以便我可以在那里使用某种条件或仅更新记录的更改部分。

1 个答案:

答案 0 :(得分:0)

首先尝试将您的c#驱动程序更新为2.0,而不是使用ReplaceOneupsert = 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} );