我正在开发一个应用程序,在其中使用了MongoDB作为数据库,并在应用层中使用Nodejs + Express,我有两个集合,分别为
- 用户
- 交易
我需要更新成千上万名用户的钱包,如果成功,则为每个交易创建一个新文档以记录相关信息。这是我的代码:
userModel.update({_id : ObjectId(userId)}, {$inc : {wallet : 500}}, function (err, creditInfo) {
if(err){
console.log(err);
}
if(creditInfo.nModified > 0) {
newTransModel = new transModel({
usersId: ObjectId(userId),
amount: winAmt,
type: 'credit',
});
newTransModel.save(function (err, doc) {
if(err){
Cb(err);
}
});
}
});
但是这个解决方案不是原子的(atomic),用户钱包被更新了,但相关的交易并没有在交易集合中创建,导致财务损失的可能性始终存在。
我听说最近MongoDB
在其4.0版本
中添加了Transactions
支持,我已经阅读了MongoDB的文档,但无法成功地在Node.js中使用mongoose实现它,有人可以告诉我如何使用MongoDB的最新Transactions
功能重新实现上述代码吗?
Session.startTransaction()
Session.abortTransaction()
Session.commitTransaction()
MongoDB文档:点击此处