如果文档的_id已经存在,如何将数组元素推送到数组,如果_id不存在,则创build新文档?

我使用Node.jsmongoosemongodbexpressangular 。 我正在一个mongoose模型中保存一个调查答复。 很多人会提交特定调查的回复。 当第一个人提交调查答复时,我想为该调查创build一个新文档。 当第二,第三……等人提交同一调查答复时,我想添加数组元素只在以下模式的答复arrays。

当第一个人提交新调查答复时,我想为新调查创build一个新文档。 我怎样才能用mongoose做到这一点?

我在Mongoose.js中发现了类似的问题:如何实现创build或更新? 。 但是,在这里我想推新回复到下一个数组索引的答复[]如果find_id,否则创build一个新的文档

mongoose模型

  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("/"); }); }); 

伪未经testing的代码。

  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