C# MongoDb查找和更新(多个)

3
从名称FindOneAndUpdate()中,我理解这是一种原子操作如果我想查找10个项目(Limit(10))并更新它们的状态?
例如将状态字段设置为“正在进行”?
MongoDb是否可以实现原子性?C#驱动程序中是否有内置功能?如果可以避免,我不想自己实现2PC,因为我有其他使用者也要求文档。虽然对我的业务案例来说这不是关键问题,但我仍希望避免双重处理的情况,因为这样可以减少网络流量和提高性能。
不使用FindOneAndUpdate() 10次的原因纯粹是与网络相关(较少的通信和更好的性能)。我没有事务行为的要求。
数据库和业务案例都不在我的控制范围内,但我被告知会快速处理许多文件。
1个回答

0
在MongoDB中,操作仅在每个文档的基础上被视为原子操作。也就是说,如果您使用单个更新语句更新文档中的多个字段,则在更新正在进行时查询它们,您将获得所有更新或没有更新。这意味着影响多个文档的更新不会跨所有文档成为原子操作,但在文档内部将是原子操作。
由于您似乎关心更有效地向服务器发送命令,而不是操作是否在服务器端是原子操作,因此您可以使用BulkWriteAsync(),它接受要在服务器上执行的更新的IEnumerable<WriteModel<TDocument>>
这使您能够构建更新列表并在一次操作中将其执行到服务器上。在此过程中必须注意正确处理失败的写入。请查看MongoDB文档here上的相关内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接