我们处理订单请求,当多个HTTP请求命中同一个路由函数时,表示该函数不能正常工作
实际上,我们为所有与数据库相关的查询编写了 async await 操作
我们的编码示例是
buyCtrl.orderPlace = async function (req, res, next) {
var response = await table1.find({exchange:ref_m}).sort({_id:-1}).limit(1);
if(response.length > 0)
{
var incRes = await table2.findOneAndUpdate({_id:1},{a:b}, {new: true});
var OrdersIns = new Orders();
OrdersIns.userid = userid;
OrdersIns.from = 'a';
OrdersIns.to = 'b';
await OrdersIns.save();
await compare(positiondetails[0]);
res.status(200).json({status:true,message:'Order placed successfully'});
}
}
const compare = async (curOrder) => {
var result = await Orders.find({userid:mongoose.Types.ObjectId(userid),type:opp}).sort({posTimestamp:1});
if(result.length>0)
{
for(var pi=0;pi<result.length;pi++)
{
if(parseFloat(curOrder.qty)==parseFloat(result[i].qty))
{
var updatedata = {a:b}
await Orders.findOneAndUpdate({_id:mongoose.Types.ObjectId(curOrder._id)}, updatedata, {new: true});
await Orders.remove({_id:mongoose.Types.ObjectId(result[i]._id)});
}
else
{
var updatedata = {a:b}
await Orders.findOneAndUpdate({_id:mongoose.Types.ObjectId(result[i]._id))}, updatedata, {new: true});
await Orders.remove({_id:mongoose.Types.ObjectId(curOrder._id)});
}
}
}
}
这是我们的流程我无法粘贴我的完整代码所以制作一些示例代码 请检查并分享您的想法 当我们使用更多并发请求进行自动化测试时,比较和更新无法正常工作
提前致谢
答案 0 :(得分:0)
对于诸如递增和递减之类的原子操作,可以使用 MongoDB 提供的 API 来完成。另一种解决方案是使用 MongoDB 开箱即用的版本控制。并发连接可能会更新在更新发生之前发生更改的对象。