是否有任何设计模式来确保文档始终是upsert / updated?
例如,
db.people.update(
{ name: "Andy", approved: false },
{
name: "Andy",
rating: 1,
score: 1,
approved: true,
},
{ upsert: true })
db.people.remove(
{ name: "Andy", approved: false },
因此,假设这两个操作同时发生,则可能发生以下情况:
如何防止案件3发生?案例1和2是有意的。最终目标是始终在用户单击更新按钮时创建文档。我知道更新操作是原子的,但我不认为更新with和upsert是原子的,因为来自MongoDB的以下语句。
考虑多个客户端何时使用upsert发出以下更新:同时为true:如果所有update()操作在任何客户端成功插入数据之前完成查询部分,并且名称字段上没有唯一索引,然后每次更新操作都可能导致插入。
我们将更新查询为(Q),我们将更新/ upsert作为(U)。删除了另一个原子操作(R),