在mongodb中嵌入插入数组

时间:2016-08-21 13:36:43

标签: javascript node.js mongodb database

我必须尝试使用​​下面的查询在MongoDB中存储数组数据。但是每次运行此查询时,没有数据的show success消息意味着MongoDB中的空数组

我的要求是将数组数据存储在MongoDB中,如下面的查询。

1)。这是我的节点js脚本

this.childQuestionInfo = function(req, res, next){

    try{
        var quizArr = [];
        var quizObj = {
            'child.quiz.questionId' : req.params.questionId,
            'child.quiz.score' : req.params.score,
            'child.quiz.time' : new Date().toISOString()
            };
        quizArr.push(quizObj);
        var userObj = {
            'userid' : req.params.userId,
            'quiz' : quizArr
        };
        var childinfoSave = new QuizChildInfo(userObj);

        childinfoSave.save(function(err, data){
            if(err) return next(err);
            res.send("Child questionId score and date saved successfully" + data);
            console.log("Child questionId score and date saved successfully");
        });            
    }catch(err){
        console.log('Error While Saving the child questionId score and Date ' +err);
        return next(err);
        }
    };

2)。这是我的孩子架构

     userId:{
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
            },
    quiz:[
          {
          questionId:{
                     type: mongoose.Schema.Types.ObjectId,
                    ref: 'question'
                                },
                                score:{type:Number},
                                time:{type:String}
                                }
                             ]

3)。这是我通过邮递员的输出屏幕

     "Child questionId score and date saved successfully
     { __v: 0,\n  _id: 57b9ac672c5791f8097d2132,\n  levelsAttempted: [],\n   quiz: [ { _id: 57b9ac672c5791f8097d2133 } ] }"

1 个答案:

答案 0 :(得分:0)

使用$push

尝试此操作
this.childQuestionInfo = function(req, res, next){

    try{

        var queryObj={};
        var childObj={};
        var queryObj = {userid: req.params.userId};
        var options = {safe: true, upsert: true};
            childObj.questionId' : req.params.questionId,
            childObj.score' : req.params.score,
            childObj.time' : new Date().toISOString()
            };

        QuizChildInfo.findOneAndUpdate( queryObj, { $push: childObj }, options, function (err, data) {
            if(err) return next(err);
            res.send("Child questionId score and date saved successfully" + data);
            console.log("Child questionId score and date saved successfully");
        });


    }catch(err){
        console.log('Error While Saving the child questionId score and Date ' +err);
        return next(err);
        }
    };