c# Mongodb 2.0 驱动程序获取 UpdateManyAsync 结果

c# Mongodb 2.0 driver get UpdateManyAsync result

有什么办法可以得到更新后的合集after/before更新吗? 我能想到的还是挺重的。

  1. 使用过滤器获取我想要更新的内容。
  2. 更新我在之前状态下得到的所有东西
  3. 再次通过id获取所有内容并检查已更新的内容。

为什么我需要这个?

我有一个不断从数据库中获取数据的服务。 我希望它根据它们的状态原子地获取东西。

例如,如果包含字段 Status 的文档的状态为 1,我希望服务获取它并在此过程中自动将其更改为 2,因此其他所有组件都不会出于某种原因覆盖我.

更新看起来像:

var filter = Builders<ServiceModel>.Filter.And(
                                                                Builders<ServiceModel>.Filter.Gt(t => t.EndDate, dueDate),
                                                                Builders<ServiceModel>.Filter.Eq(t => t.Status, Enums.ServiceHandleStatus.Registered));

            var update = Builders<ServiceModel>.Update.Set(t => t.Status, Enums.ServiceHandleStatus.InProcess);

            var options = new UpdateOptions() { IsUpsert = false };

            using (var result = this.manager.Trainings.UpdateManyAsync(filter, update, options))

有什么方向吗?

TIA。

mongodb 中唯一像这样的原子更新是使用 findAndModify,它在 .NET 中显示为 FindOneAndUpdate。因此,您可以随心所欲,但一次只能处理一个文档。

更新

如果您可以发出多个请求,您可以使用 UpdateMany 在 2 个请求中执行此操作,而不是仅仅将它们标记为 InProcess,还指示哪个进程正在处理它们。然后,您可以进行后续查询以返回并提取当前进程的所有 InProcess。

唯一的问题是您无法指示仅更新 10、20 或 10K,这意味着您无法扩展到多个 "processors",因为您将更新 全部