Mongo Update无意中插入文档

本文关键字:文档 插入 无意中 Update Mongo | 更新日期: 2023-09-27 18:27:49

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

我已经把这个问题归结为一个异步调用的更新函数,它可以同时调用多次。为了避免并发运行的问题,我使用了一个更新来实现这段代码,我在任何匹配特定查询的文档上触发该更新(在用户和程序上是唯一的),如果找不到文档,就会进行追加销售。

最初,我可以保证不存在重复,因此预计只有以下两种情况可以发生:

  • 不存在匹配的文档,触发追加销售以添加新文档
  • 存在一个匹配的文档,因此仅在该文档上触发更新

考虑到这两种情况,我预计没有办法通过该功能插入重复的文档——只有在一开始没有文档的情况下才应该插入新文档。然而,在一个小时左右的时间里,我发现即使存在特定用户/程序对的文档,也会为它们创建新的文档。

我是否正确地执行了此更新以确保不会创建重复的文档?如果没有,为了确保这一点,实现更新的正确方法是什么?

这就是有问题的功能:

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

附加信息:

  • 我使用的是mongod 2.6.5版本
  • 我使用的mongocsharpdriver版本是1.9.2
  • 我正在运行.NET 4.5
  • UserSearchTerms是我存储这些文档的集合
  • 该查询旨在匹配userId和programId(我对"唯一"文档的定义)上的用户
  • 出于调试目的,我在事实之后返回一个计数

Mongo Update无意中插入文档

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

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