C# MongoDb FindAndUpdate (many)

本文关键字:many FindAndUpdate MongoDb | 更新日期: 2023-09-27 17:59:27

根据名称FindOneAndUpdate(),我理解这是一个原子操作

如果我想找到10个项目(限制(10))并更新它们,该怎么办
例如,将状态字段设置为"正在进行"?

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

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

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

C# MongoDb FindAndUpdate (many)

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

因为听起来你关心的是向服务器发送命令的效率,而不是操作是否是原子服务器端,所以你可以使用BulkWriteAsync(),它需要IEnumerable<WriteModel<TDocument>>的更新才能在服务器上执行。

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