testingfindOneAndUpdate插入重复预防

您好我有一个节点js代码,使用findOneAndUpdate与Upsert = true创build一个新的MongoDB文档,如果不存在。

我想testing两个asynchronous线程同时调用我的代码,然后它会创build重复。

那甚至有可能testing? 我怎样才能做到这一点。 我是一个初学者在testing。

文档级并发性

WiredTiger使用文档级并发控制进行写入操作。 因此,多个客户端可以同时修改集合的不同文档。

对于大多数读写操作,WiredTiger使用乐观并发控制。 WiredTiger仅在全局,数据库和集合级别使用意向锁。 当存储引擎检测到两个操作之间存在冲突时,会引发写冲突,导致MongoDB透明地重试该操作。

一些涉及多个数据库的全球性操作(通常是短期操作)仍然需要全局“实例范围”locking。 其他一些操作(如删除集合)仍需要独占数据库locking。

文档级并发性

而且在同一个集合中_id永远不会存在_id有一个唯一的索引,所以即使你正在解释的情况发生,第一个将被执行的查询将会创build一个新的文档,后面的查询将会更新它。