繁体   English   中英

用猫鼬更新相关字段

[英]Updating dependent fields with mongoose

目标:我正在创建一个模拟交易,涉及两个帐户之间交换一定金额。 (使用NodeJS服务器和Mongoose)

    | ACCOUNT1   | ACCOUNT2  |   (Account Balance)
--------------------------------
 T1.|    5000    |   2000    |   (initial values)
--------------------------------
 T2.|    3000    |   4000    |   (ACCOUNT1 transfers 2000 to ACCOUNT2)
--------------------------------

问题:问题在于每个事务T1,T2都需要执行两个操作:

  1. 更新帐户1
  2. 更新帐户2

这两个中的任何一个失败都会导致另一个回滚


当前方法:

// save transaction log.then(function(data){
AccountHelper.updateAccount(accountOwner, fromAccount, amount)
  .then(function(data){
    AccountHelper.updateAccount(accountOwner, fromAccount, amount)
      .then(function(data){
         //some success response
       }).catch(function(err){
         // rollback the previous update
         // respond with the err
       });     
  })
  .catch(function(err){
    // respond with the err           
  });
  //}).catch(function(err){ respond with the err});

有一个更好的方法吗? 我可以想到的另一种方法是:

事件发射器方式:

  1. 保存事务日志。
  2. 发出事件。
  3. 事件处理程序对事务日志中提到的集合进行快照。
  4. 更新收藏
  5. 如果任何更新失败,请按快照回滚。

另请注意,将来可以在任何时候删除任何必须反映在当前余额中的交易(交易涉及的总和必须还原到原始帐户中)。

通常,不要。 正如mongoose-transact模块的作者雄辩地说的那样,出于某种原因,交易被排除在Mongodb中。

https://www.npmjs.com/package/mongoose-transact

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM