c#Mongodb 2.0驱动程序获取UpdateManaySync结果
有没有办法在更新后/之前获取更新的集合? 我能想到的东西很重c#Mongodb 2.0驱动程序获取UpdateManaySync结果,c#,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,有没有办法在更新后/之前获取更新的集合? 我能想到的东西很重 使用筛选器获取要更新的内容 更新我在前一个状态中得到的所有信息 再次获取所有ID,并检查已更新的内容 为什么我需要这个 我有一个不断从数据库获取数据的服务。 我希望它能根据他们的状态,原子化地接收东西 例如,如果包含字段Status的文档的状态为1,我希望服务获取该文档,并在过程中将其自动更改为2,这样其他所有组件都不会出于某种原因覆盖我 更新看起来像: var filter = Builders<ServiceModel>
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))
var filter=Builders.filter.And(
Builders.Filter.Gt(t=>t.EndDate,dueDate),
Builders.Filter.Eq(t=>t.Status,Enums.ServiceHandleStatus.Registered));
var update=Builders.update.Set(t=>t.Status,Enums.ServiceHandleStatus.InProcess);
var options=newupdateOptions(){IsUpsert=false};
使用(var result=this.manager.Trainings.UpdateManyAsync(过滤器、更新、选项))
有什么方向吗
TIA.mongodb中唯一的原子更新是使用findAndModify,它在.NET中以FindOneAndUpdate的形式出现。因此,您可以做您想做的事情,但一次只能做一个文档 更新 如果您可以发出多个请求,那么可以使用UpdateMany在两个请求中执行此操作,并且不只是将它们标记为InProcess,还可以指示哪个进程正在处理它们。然后,您可以进行后续查询以返回并提取当前进程的所有进程中的查询
唯一的问题是,您不能指示只更新10、20或10K,这意味着您不能扩展到多个“处理器”,因为您将更新所有处理器。因此,例如,如果我希望以每分钟10K-20k的速度收集数据。你的建议是什么?如果我必须发送20k个单一请求,这太糟糕了,你不认为吗?你认为哪一个更好,我的三阶段方式还是一步一个脚印的方式?你必须测试和观察。这完全取决于用例。但是,单独执行阶段1和阶段2将导致多个“处理者”获取相同的文档。因此,您需要结合1和2,正如我在更新的答案中提到的。如果您想支持多个“处理器”,则需要使用FindOneAndUpdate逐个执行。