C#MongoDb FindAndUpdate(很多)

时间:2016-08-01 17:18:05

标签: c# mongodb mongodb-.net-driver

从名称FindOneAndUpdate()我知道这是原子操作

如果我想找到10个项目(限制(10))并将它们全部更新怎么办?
例如,将状态字段设置为“进行中”?

MongoDb可以原子地实现吗?可能在C#驱动程序中有一些内置功能吗?如果可以避免,我不想自己实施2PC :-) 我还有其他消费者要求提供文件,因此我想避免双重处理,尽管这对我的商业案例并不重要。

NOT 使用FindOneAndUpdate() 10次的动机纯粹是网络(较少聊天,性能更好)相关。我没有类似交易行为的要求。

数据库和商业案例都在我的控制之下,但我被告知期望许多文件很快进出。

1 个答案:

答案 0 :(得分:0)

在MongoDB中,操作仅在每个文档的基础上被视为原子操作。也就是说,如果使用单个更新语句更新文档中的多个字段,则在更新发生时,您将获得所有更新,或者不查询任何更新。这意味着影响多个文档的更新不会是跨所有文档的原子操作,但在文档中将是原子操作。

因为你觉得你更关心的是向服务器发送命令更有效率,而不是操作是否是原子服务器端,你可以使用BulkWriteAsync() {{1}要在服务器上执行的更新。

这允许您构建列表更新并在一次操作中执行它们到服务器。在此过程中必须小心,以正确处理失败的写入。在here上查看MongoDB文档。