MongoDb - InsertCondtion - 使用版本检查 - 仅在查询没有项目时才进行插入

时间:2017-07-24 13:32:37

标签: mongodb mongodb-query mongodb-.net-driver

我有一个存储库,我在其中插入了一系列事件。

现在我想确保当我插入事件dtos时,同时没有任何新事件。

所以我现在所做的是

  • 查询HighestChangedDate或最高版本
  • 没有任何新的东西(如果有些东西更新的话会抛出)
  • 插入

但是现在在查询和插入之间存在时间差。我需要将这些组合在一起,以便它是某种交易方式。

有没有办法做到这一点,还是我必须忍受这个差距,并解决基础设施的这个问题?

1 个答案:

答案 0 :(得分:1)

我发现了。

我可以将FindOneAndUpdate用作Upsert。可以省略更新值,仅设置SetOnInsert值 像这样

  var builder = new UpdateDefinitionBuilder<Dto>();
            var def = builder
                .SetOnInsert(x => x.Version, EventVersion)

...

现在,当运行以下更新时,只有在满足我的版本条件时才会插入

collection.FindOneAndUpdate(VersionCondition, updateValues, new FindOneAndUpdateOptions<Event>() {IsUpsert = true});

在此之后,我可以断言返回的文档是否与我想要插入的文档相同。