【问题标题】:In mongoose how do I push a subdocument onto an array of a saved objects and then return what I just pushed?在猫鼬中,如何将子文档推送到已保存对象的数组上,然后返回我刚刚推送的内容?
【发布时间】:2013-02-06 09:52:16
【问题描述】:

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

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 2020-07-10
      • 2017-01-11
      • 2018-05-17
      • 2016-06-05
      • 2018-07-08
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多