C# Mongo更新无意中插入文档
我有一个用C#编写的.NET应用程序,并使用Mongo作为我的数据库后端。我的一个收藏UserSearchTerms反复(无意)创建了重复的文档 我已经解决了一个更新函数的问题,该函数可以异步调用,并且可以同时调用多次。为了避免并发运行的问题,我使用了一个更新来实现这段代码,该更新在匹配特定查询(在用户和程序上是唯一的)的任何文档上触发,如果找不到文档,则升级 最初,我可以保证不存在重复的情况,因此预计只会发生以下两种情况:C# Mongo更新无意中插入文档,c#,.net,mongodb,mongodb-.net-driver,C#,.net,Mongodb,Mongodb .net Driver,我有一个用C#编写的.NET应用程序,并使用Mongo作为我的数据库后端。我的一个收藏UserSearchTerms反复(无意)创建了重复的文档 我已经解决了一个更新函数的问题,该函数可以异步调用,并且可以同时调用多次。为了避免并发运行的问题,我使用了一个更新来实现这段代码,该更新在匹配特定查询(在用户和程序上是唯一的)的任何文档上触发,如果找不到文档,则升级 最初,我可以保证不存在重复的情况,因此预计只会发生以下两种情况: 不存在匹配的文档,将触发upsert以添加新文档 存在一个匹配文档,
- 不存在匹配的文档,将触发upsert以添加新文档
- 存在一个匹配文档,因此仅对该文档触发更新
public int UpdateSearchTerm(UserSearchTerm item)
{
_userSearches = _uow.Db.GetCollection<UserSearchTerm>("UserSearchTerms");
var query = Query.And(Query<UserSearchTerm>.EQ(ust => ust.UserId, item.UserId), Query<UserSearchTerm>.EQ(ust => ust.ProgramId, item.ProgramId));
_userSearches.Update(query, Update<UserSearchTerm>.Replace(item), new MongoUpdateOptions { Flags = UpdateFlags.Upsert });
return (int)_userSearches.Count(query);
}
public int UpdateSearchTerm(UserSearchTerm项)
{
_userSearches=_uow.Db.GetCollection(“UserSearchTerms”);
var query=query.And(query.EQ(ust=>ust.UserId,item.UserId),query.EQ(ust=>ust.ProgramId,item.ProgramId));
_userSearches.Update(查询,Update.Replace(item),new-MongoUpdateOptions{Flags=UpdateFlags.Upsert});
return(int)_userSearches.Count(query);
}
其他信息:
- 我使用的是mongod版本2.6.5
- 我使用的mongocsharpdriver版本是1.9.2
- 我正在运行.NET4.5
- UserSearchTerms是我存储这些文档的集合
- 该查询旨在匹配userId和programId(我对“唯一”文档的定义)上的用户
- 出于调试目的,我在事实之后返回一个计数
Doc:数据库索引确实可以防止插入重复项,但这并不能解决为什么要首先插入的问题。我想知道为什么会发生这种情况并修复它,因为这似乎是更正确的修复方法。建议使用唯一索引:哦,好的!我不知道这是已知的行为——如果Mongo推荐,那就是答案。谢谢