【问题标题】:Nodejs - concurrent or parallel API calls creates duplicates entries in mongodbNodejs - 并发或并行 API 调用在 mongodb 中创建重复条目
【发布时间】:2021-12-27 06:38:37
【问题描述】:

直截了当:

我在 1 秒内从同一台机器(用户)或不同机器(用户)单击按钮两次。它正在创建两个文档(重复)。

简而言之可能是如何并行或同时处理多个 API 调用。

我的怀疑:

  1. Nodejs 收集 API 调用 -> db.find(name) -> 未找到 -> 创建新文档(正在运行)

在上述文档创建完成之前。 Nodejs 开始执行下一个 API 调用。

  1. Nodejs 收集 API 调用 -> db.find(name) -> 未找到 -> 创建新文档。

示例代码:这里创建了两个同名帐户。

    const userPresent = await User.findOne({
      phoneNumber: data.phoneNumber,
    });
    if (userPresent) {
      throw new CustomError("OIC_ERROR_00027", "User already present");
    }
    // new account created
    const newAccount = await new Account({
      name: data.name,
    }).save();

【问题讨论】:

    标签: node.js mongodb express asynchronous duplicates


    【解决方案1】:

    您可以尝试为您的产品名称创建一个unique index。这将导致您的产品名称没有任何重复。

    db.collection.createIndex( {"name":1} , { unique: true } )
    

    【讨论】:

    • 但是,我不希望同名重复
    • 是的,它不会有任何重复...你有没有尝试过
    • 请检查问题中已编辑的代码,您的解决方案能否解决上述问题?当同时发生更多或 1000 个呼叫时。我只是超级好奇
    • 据我所知,它只是作为主键?
    • 通过创建唯一索引 MongoDB 防止创建任何相同的 {name:"name"} 文档,随后的 .save() 命令将返回错误 {name:"name"} .因此,您的文档中只能找到该文档的一个实例
    【解决方案2】:

    问题是我在连接到 MongoDB 时给出了autoindex: false 选项。所以数据库没有在猫鼬模式中使用indexing 命令。我删除了autoindex: false 并遵循@koodies 的指导。感谢现在工作!

    但是当我尝试创建连接并像db.model("modelName")一样使用它时不起作用

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 2015-11-25
      • 2012-12-21
      • 2017-05-28
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      相关资源
      最近更新 更多