保存后的Mongoose更新

时间:2015-02-10 07:42:37

标签: javascript node.js mongoose

我遗漏了一些关于Mongoose保存功能的回调。 我正在尝试插入新事务,如果成功,则更新用户帐户。我相信这个问题,导致所有人都用最后一个人的金额进行更新。我想要做的是在保存另一个文档后更新文档。

这是代码。请让我知道我做错了什么。 提前谢谢。

//find all schedules
SchedModel.find({ Day_Of_Week: day }, null, null, function (err, Sched) {
   if (!err) {
      //iterate through what we find
      for (var key in Sched) {
         if (Sched.hasOwnProperty(key)) {
            var val = Sched[key];
            console.log("val : " + val);
            var Sched_Descr = day || ' Sched Trans';  
            var this_trans = new TransModel({
                         mID: val.K_Id,
                         mDate: today,
                         mDescr: Sched_Descr,
                         mAmt: val.mAmt
             });
             //insert the new trans
             this_trans.save(function (err, trans) {
                if (!err) {
                   //when we insert new trans, get the update model
                   MyModel.findById(val.K_Id, function (err, Model) {
                      Model.Balance = Model.Balance + val.mAmt;
                      //save model, this update to the last in the list
                      Model.save(function (err) {
                         if (!err) {
                            console.log("updated");
                         } else {
                            console.log(err);
                         }
                      });
                   });              
                } else {
                   return console.log(err);
                }
             });                           
          }
       }
    } else {
       console.log(err);
    };
 });

1 个答案:

答案 0 :(得分:1)

更新:ES6的let非常简单地解决了这个问题,只需用原始代码中的var替换let即可。


您的this_trans和此类变量在for-in循环的每次迭代中都不是唯一的。您可能希望将其包装在自动执行的匿名函数范围((function(){})()

//find all schedules
SchedModel.find({ Day_Of_Week: day }, null, null, function (err, Sched) {
   if (!err) {
      //iterate through what we find
      for (var key in Sched) {
        (function(key){       // self-executing anonymous function scope
         if (Sched.hasOwnProperty(key)) {
            var val = Sched[key];
            console.log("val : " + val);
            var Sched_Descr = day || ' Sched Trans';  
            var this_trans = new TransModel({
                         mID: val.K_Id,
                         mDate: today,
                         mDescr: Sched_Descr,
                         mAmt: val.mAmt
             });
             //insert the new trans
             this_trans.save(function (err, trans) {
                if (!err) {
                   //when we insert new trans, get the update model
                   MyModel.findById(val.K_Id, function (err, Model) {
                      Model.Balance = Model.Balance + val.mAmt;
                      //save model, this update to the last in the list
                      Model.save(function (err) {
                         if (!err) {
                            console.log("updated");
                         } else {
                            console.log(err);
                         }
                      });
                   });              
                } else {
                   return console.log(err);
                }
             });                           
          }
        })(key);
      }
    } else {
       console.log(err);
    };
 });