mongoengine 的操作有多原子化

How atomic are mongoengine's operations

我正在尝试像这样在对象的状态之间转换:

User.objects(id=user_id, state=STATE_WAITING).update_one(set__state=STATE_FINISHED)

问题是,是否会出现两个进程异步进行same操作并成功的情况?

如果是这样,这个操作可以是原子操作吗,那么下一个尝试更新用户(同时异步)的进程将会失败,因为它的状态已经是 "finished"?

在单个文档上写入时,操作是原子的。

In MongoDB, a write operation is atomic on the level of a single document, even if the operation modifies multiple embedded documents within a single document.

在非原子的多个文档上写入时。

此外,可以使用两阶段提交模拟多文档事务,详细信息here