【问题标题】:Mongoose update after save保存后猫鼬更新
【发布时间】:2015-04-10 04:16:24
【问题描述】:

我错过了一些关于 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);
    };
 });

【问题讨论】:

  • 你试过 findAndModify 吗?它可以帮助你

标签: javascript node.js mongoose


【解决方案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);
    };
 });

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多