繁体   English   中英

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

[英]c# Mongodb 2.0 driver get UpdateManyAsync result

在更新之前/之前,有什么方法可以获取更新的集合吗? 我能想到的很沉重。

  1. 得到我想使用过滤器更新。
  2. 更新我以前状态下的所有内容
  3. 再次获得所有ID,并检查已更新的内容。

为什么我需要这个?

我有一项不断从数据库中获取数据的服务。 我希望它根据自己的状态来自动获取内容。

例如,如果包含状态字段的文档的状态为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,这意味着您无法扩展到多个“处理器”,因为您将要更新所有这些处理器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM