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

1 に答える 1

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]);
});
于 2013-02-06T01:52:16.103 に答える