【问题标题】:Testing findOneAndUpdate upsert duplicate prevention测试 findOneAndUpdate upsert 重复预防
【发布时间】:2018-05-09 06:44:00
【问题描述】:

您好,我有一个节点 js 代码,它使用带有 Upsert = true 的 findOneAndUpdate 来创建一个新的 mongodb 文档(如果不存在)。

我想测试两个异步线程是否同时调用我的代码,然后它会创建重复。

这甚至可以测试吗?我怎样才能做到这一点。我是测试初学者。

【问题讨论】:

    标签: node.js mongodb testing mongoose mean-stack


    【解决方案1】:

    文档级并发

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

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

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

    Document Level Concurrency

    并且在单个集合中,相同的 _id 永远不会存在 _id 上具有唯一索引,因此即使您解释的情况发生,将执行的第一个查询将创建一个新文档,后面的查询将更新它.

    【讨论】:

    • 重复我的意思是创建两个文档,使用不同的 id 和相同的数据值。 docs.mongodb.com/manual/reference/method/… 在 Upsert 和唯一索引上查看此链接段落。
    • 好的,我以为你只是通过匹配 _id 来更新。在您的情况下,如果您尝试匹配更新的字段不是唯一索引的,您最终可能会得到重复的文档。
    • 是的,是的,我让它们独一无二,只是想知道我是否可以测试一下。
    猜你喜欢
    • 2018-03-11
    • 2013-06-19
    • 2016-05-08
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多