【发布时间】:2021-08-17 08:19:47
【问题描述】:
我在使用 MongoDB 和 Nodejs 的地方有以下代码。我从集合中读取数据,对数据执行一些算术运算,然后更新文档。我的问题是,当多个请求同时出现时,会导致一些数据丢失。我怎样才能避免这种情况?
//Read the Document
const commissionRecord = await CommissionTable.getCommissionRecord(
publicKey
);
// Check if A record Exists or Not
if (commissionRecord.responseData.exists === true) {
// Assigning values to variables
commissionLimit =
commissionRecord.responseData.data.commissionLimit;
commission = commissionRecord.responseData.data.commission;
}
// Perform Arithmetic Operations
commissionLimit = parseInt(commissionLimit) + parseInt(amount);
if (commissionLimit >= 20) {
remainder = commissionLimit % 20;
commission =
parseInt(commission) + Math.floor(commissionLimit / 20);
commissionLimit = parseInt(remainder);
}
if (commissionRecord.responseData.exists === true) {
//Update the document
const result = await CommissionTable.updateCommissionNormal(
publicKey,
commission,
commissionLimit
);
if (result.success) {
return result;
}
问题是,当所有请求同时到来时,它们都一起读取数据,并且更新都是基于它们读取的数据进行的。这种情况如何解决?
【问题讨论】:
标签: node.js mongodb concurrency versioning