1

有没有办法在更新之后/之前获取更新的集合?我能想到的东西是相当沉重的。

  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。

4

1 回答 1

2

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

更新

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

唯一的问题是您不能指示仅更新 10、20 或 10K,这意味着您无法扩展到多个“处理器”,因为您将更新所有这些。

于 2016-01-20T20:46:34.243 回答