2015-02-10 6 views
0

Мне не хватает чего-то о обратных вызовах с функцией сохранения 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); 
    }; 
}); 
+0

вы пробовали findAndModify? Это может помочь вам –

ответ

0

Ваши this_trans и такие переменные не являются уникальными в каждой итерации цикла для-в. Вы могли бы хотеть обернуть его в прямоприменяемых анонимной функции сферы ((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); 
    }; 
}); 
+0

Спасибо, это сработало. –

Смежные вопросы