2013-02-05 13 views
1

我想每次將子文檔推送到我的對象上。以下是POST的處理程序。首先檢查是否邀請該帳戶參與調查。如果一切都檢出,那麼我們要將響應推送到調查響應數組中。在貓鼬中,如何將子文檔推送到已保存對象的數組上,然後返回我剛剛推送的內容?

handler: function(req, res, next) { 
     var survey = req.params.survey; 
     var account = req.params.account; 

     Survey.findById(survey).exec(function(err, survey) { 
      if(err) { return handleError(res, err); } 
      if(!survey) { return handleError(res, 'Invalid Survey', true); } 
      if(!account) { return handleError(res, 'Invalid Account', true); } 

      var invite = _(survey.invites).find(function(i){ 
       return i.account == account; 
      }); 

      if(!invite) { 
       return handleError(res, 'No invite exists for user'); 
      } 

      if(!survey.responses) { 
       survey.responses = []; 
      } 

      var response = survey.responses.push(req.params); 

      console.log(response); // returns an integer want it to return the subdocument 

      survey.save(function(err){ 
       if(err) { return handleError(res, err); } 
       return res.send(response); 
      }); 

     }); 
    } 

我的模式:

var SurveyResponseSchema = new Schema({ 
    account: {type: Schema.Types.ObjectId, ref: 'Account', required: true}, 
    answers: [SurveyAnswerSchema], 
    complete: Boolean 
}); 

var SurveySchema = new Schema({ 
    start_date: Date, 
    end_date: Date, 
    title: String, 
    survey_questions: [SurveyQuestionSchema], 
    invites: [SurveyInviteSchema], 
    responses: [SurveyResponseSchema] 
}); 

回答

6

push返回responses數組的新長度,所以你想要做這樣的事情:

var responseIx = survey.responses.push(req.params) - 1; 

survey.save(function(err, survey){ 
    if(err) { return handleError(res, err); } 
    return res.send(survey.responses[responseIx]); 
}); 
相關問題