【发布时间】:2018-05-09 06:44:00
【问题描述】:
您好,我有一个节点 js 代码,它使用带有 Upsert = true 的 findOneAndUpdate 来创建一个新的 mongodb 文档(如果不存在)。
我想测试两个异步线程是否同时调用我的代码,然后它会创建重复。
这甚至可以测试吗?我怎样才能做到这一点。我是测试初学者。
【问题讨论】:
标签: node.js mongodb testing mongoose mean-stack
您好,我有一个节点 js 代码,它使用带有 Upsert = true 的 findOneAndUpdate 来创建一个新的 mongodb 文档(如果不存在)。
我想测试两个异步线程是否同时调用我的代码,然后它会创建重复。
这甚至可以测试吗?我怎样才能做到这一点。我是测试初学者。
【问题讨论】:
标签: node.js mongodb testing mongoose mean-stack
文档级并发
WiredTiger 使用文档级并发控制进行写入 操作。因此,多个客户端可以修改不同的 一个集合的文档。
对于大多数读写操作,WiredTiger 使用乐观 并发控制。 WiredTiger 仅在全局使用意图锁, 数据库和集合级别。当存储引擎检测到 两个操作之间的冲突,一个会导致写冲突 导致 MongoDB 透明地重试该操作。
一些全局操作,通常是短暂的操作,涉及 多个数据库,仍然需要全局“实例范围”锁。一些 其他操作,例如删除集合,仍然需要 独占数据库锁。
并且在单个集合中,相同的 _id 永远不会存在 _id 上具有唯一索引,因此即使您解释的情况发生,将执行的第一个查询将创建一个新文档,后面的查询将更新它.
【讨论】: