Nodejs - 并发或并行 API 调用在 mongodb 中创建重复项
Nodejs - concurrent or parallel API calls creates duplicates entries in mongodb
直截了当:
我在 1 秒内从同一台机器(用户)或不同机器(用户)单击按钮两次。它正在创建两个文档(重复)。
简而言之可能是如何并行或同时处理多个 API 调用。
我怀疑的是:
- Nodejs 收集 API 调用 ->
db.find(name)
-> 未找到 -> 创建新文档(其 运行)
Before the above document creation done. Nodejs started executing the next API call.
- 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();
您可以尝试为您的产品名称创建一个 unique index。这将导致您的产品名称没有任何重复。
db.collection.createIndex( {"name":1} , { unique: true } )
问题是我在连接到 MongoDB 时在选项中给出了 autoindex: false
。所以数据库没有在 mongoose 模式中使用 indexing
命令。我删除了 autoindex: false
并遵循@koodies 指导。感谢现在工作!
但是当我尝试创建连接并像 db.model("modelName")
那样使用它时却无法正常工作
直截了当:
我在 1 秒内从同一台机器(用户)或不同机器(用户)单击按钮两次。它正在创建两个文档(重复)。
简而言之可能是如何并行或同时处理多个 API 调用。
我怀疑的是:
- Nodejs 收集 API 调用 ->
db.find(name)
-> 未找到 -> 创建新文档(其 运行)
Before the above document creation done. Nodejs started executing the next API call.
- 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();
您可以尝试为您的产品名称创建一个 unique index。这将导致您的产品名称没有任何重复。
db.collection.createIndex( {"name":1} , { unique: true } )
问题是我在连接到 MongoDB 时在选项中给出了 autoindex: false
。所以数据库没有在 mongoose 模式中使用 indexing
命令。我删除了 autoindex: false
并遵循@koodies 指导。感谢现在工作!
但是当我尝试创建连接并像 db.model("modelName")