c# Mongodb 2.0 驱动程序获取 UpdateManyAsync 结果
c# Mongodb 2.0 driver get UpdateManyAsync result
有什么办法可以得到更新后的合集after/before更新吗?
我能想到的还是挺重的。
- 使用过滤器获取我想要更新的内容。
- 更新我在之前状态下得到的所有东西
- 再次通过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",因为您将更新 全部。
有什么办法可以得到更新后的合集after/before更新吗? 我能想到的还是挺重的。
- 使用过滤器获取我想要更新的内容。
- 更新我在之前状态下得到的所有东西
- 再次通过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",因为您将更新 全部。