在mongoose中,如何将子文档推送到已保存对象的数组上,然后返回我刚刚推送的内容?

我试图将子文档推到我的对象每当。 以下是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] }); 

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]); });