Mongo更新无意中插入文档

Mongo Update Unintentionally Inserting Document

我有一个用 C# 编写的 .NET 应用程序,并使用 Mongo 作为我的数据库后端。我的 collection 之一 UserSearchTerms 反复(无意地)创建了重复的文档。

我已经解决了异步调用的更新函数的问题,并且可以同时调用多次。为了避免并发运行出现问题,我使用更新来实现此代码,我会在匹配特定查询(在用户和程序上唯一)的任何文档上触发该更新,如果没有找到文档则更新。

最初,我可以保证不存在重复项,因此预计只会出现以下两种情况:

考虑到这两种情况,我预计没有办法通过此函数插入​​重复文档 - 唯一应该插入新文档的时间是如果有 none 开头。然而一个多小时后,我发现即使存在特定 user/program 对的文档,也会为它们创建新文档。

我是否正确实施了此更新以保证不会创建重复的文档?如果不是,实施更新以确保这一点的正确方法是什么?

这是有问题的函数:

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

附加信息:

您可以在 userId 和 programId 上添加唯一索引,以确保不会插入重复项

文档:https://docs.mongodb.org/v2.4/tutorial/create-a-unique-index/