2016-08-21 27 views
-2

以下のクエリを使用してMongoDB内に配列データを格納しようとする必要があります。私はこのクエリを実行するたびに、データなしのshow success messageはMongoDB内の空の配列を意味します。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 } ] }" 

答えて

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); 
     } 
    }; 
を使用して、これを試してみてください、私の出力画面です
関連する問題