2017-03-08 42 views
1

我使用Node.jsmongoosemongodbexpressangular。 我在一個貓鼬模型中保存了一項調查答覆。許多人會提交特定調查的答覆。當第一個人提交調查答覆時,我想爲該調查創建一個新文檔。當第二,第三......等人提交同一調查的答覆時,我想將數組元素僅添加到以下模式中的答覆數組中。如果文檔的_id已經存在並且在_id不存在的情況下創建新文檔,如何將數組元素推送到數組?

而當第一人提交了一項新的調查我想創建一個新的調查新文檔的答覆。我怎樣才能用貓鼬做到這一點?

我發現Mongoose.js: how to implement create or update?類似的問題。 但是,在這裏我想新的答覆推到答覆的下一個數組索引[]如果_id被發現,否則創建一個新文檔

貓鼬模型

var mongoose = require("mongoose"); 
var Schema = mongoose.Schema; 

var MCQReplySchema = new Schema({ 

    _id : String, 
    surveyname: String, 
    replies :[{ 
     replierId : String, 
     answers : [{ 
      questionId : String, 
      answer : String 
     }] 
    }] 

    }); 

module.exports=mongoose.model('MCQReply',MCQReplySchema); 

保存數據到數據庫

 router.post("/saveMCQAnswer", function(req, res) { 

     new MCQReply({ 

     _id : '123', 
     surveyname: 'sample', 
     replies :[{ 
      replierId : 'R001', 
      answers : [{ 
      questionId : 'A001', 
      answer : 'answer' 
      }] 
     }] 

    }).save(function(err, doc){ 
     if(err) res.json(err); 
     else 
     req.flash('success_msg', 'User registered to Database'); 
     res.redirect("/"); 

    }); 

    }); 
+0

'_id'默認情況下實際上隱含的貓鼬試圖創建一個獨特的'_id' - 見http://mongoosejs.com/docs/guide.html#_id。是否有你想要自己指定ID的具體原因? – GPX

+0

你見過這個http://stackoverflow.com/a/13338758/6048928 – RaR

+1

的可能的複製[Mongoose.js:如何實現創建或更新](http://stackoverflow.com/questions/13337685/mongoose- js-how-to-implement - 創建或更新) – RaR

回答

1

僞未經測試的代碼。

MCQReply.findOne({_id : the id}, function(err,doc){ 
     if(err) console.log(err); 
     // if the survey isn't there `doc` will be null then do your save 
     if(!doc){ 
      new MCQReply({ 

      _id : '123', 
      surveyname: 'sample', 
      replies :[{ 
       replierId : 'R001', 
       answers : [{ 
       questionId : 'A001', 
       answer : 'answer' 
       }] 
      }] 

      }).save(function(err, doc){ 
       if(err) res.json(err); 
       else 
       req.flash('success_msg', 'User registered to Database'); 
       res.redirect("/"); 

      });     
     }else(doc){ 
      //you get mongoose document 
      doc.replies.push({replierId : "R001", answer : [{questionId : "A001" ... whatever else you want}]}) 

      //dont forget to save 
      doc.save(do error check) 
     } 


    }) 

不知道這是否會工作,但如果你有麻煩只是保存_id嘗試一下本作模式()

var MCQReplySchema = new Schema({ 

    _id : String, 
    surveyname: String, 
    replies :[{ 
     replierId : String, 
     answers : [{ 
      questionId : String, 
      answer : String 
     }] 
    }] 

    }, {strict : false}); 

如果{strict :false}不起作用

嘗試{strict : false, _id :false}或只是_id : false

+0

感謝您的回答。但是,我遇到了一些問題。 doc.replies.push({replierId:「R002」,答案:[{questionId:「A002」},{answer:「A001」}]});我修改了你的代碼。對於第一個最多的答覆,它沒有保存replierId和questionId。對於第二個答覆再次沒有replierId和答案[]內沒有。你能幫助我嗎? –

+0

也許顯示你的模式 –

+0

模式是在上面的問題。我上傳了Robomongo中架構的屏幕截圖。如果接受它將是可見的。 –

相關問題