从名称FindOneAndUpdate()
我知道这是原子操作。
如果我想找到10个项目(限制(10))并将它们全部更新怎么办?
例如,将状态字段设置为“进行中”?
MongoDb可以原子地实现吗?可能在C#驱动程序中有一些内置功能吗?如果可以避免,我不想自己实施2PC :-) 我还有其他消费者要求提供文件,因此我想避免双重处理,尽管这对我的商业案例并不重要。
NOT 使用FindOneAndUpdate()
10次的动机纯粹是网络(较少聊天,性能更好)相关。我没有类似交易行为的要求。
数据库和商业案例都在我的控制之下,但我被告知期望许多文件很快进出。
答案 0 :(得分:0)
在MongoDB中,操作仅在每个文档的基础上被视为原子操作。也就是说,如果使用单个更新语句更新文档中的多个字段,则在更新发生时,您将获得所有更新,或者不查询任何更新。这意味着影响多个文档的更新不会是跨所有文档的原子操作,但在文档中将是原子操作。
因为你觉得你更关心的是向服务器发送命令更有效率,而不是操作是否是原子服务器端,你可以使用BulkWriteAsync()
{{1}要在服务器上执行的更新。
这允许您构建列表更新并在一次操作中执行它们到服务器。在此过程中必须小心,以正确处理失败的写入。在here上查看MongoDB文档。