您好我有一个节点js代码,它使用带有Upsert = true的findOneAndUpdate来创建一个新的mongodb文件(如果不存在)。
我想测试两个异步线程是否同时调用我的代码然后它会创建重复项。
甚至可以测试吗?我怎样才能做到这一点。我是测试的初学者。
答案 0 :(得分:0)
文档级并发
WiredTiger使用文档级并发控制进行写入 操作。因此,多个客户端可以修改不同的 同时收集文件。
对于大多数读写操作,WiredTiger使用乐观 并发控制。 WiredTiger仅在全局使用意图锁, 数据库和集合级别。当存储引擎检测到时 两个操作之间的冲突,一个会产生写冲突 导致MongoDB透明地重试该操作。
一些全球业务,通常是涉及的短期业务 多个数据库仍需要全局“实例范围”锁。一些 其他操作,例如删除集合,仍然需要 独家数据库锁。
在单个集合中,同一个_id将永远不会存在_id上有唯一索引,因此即使您要解释的情况发生,第一个将执行的查询将创建一个新文档,后一个查询将更新它