如果文档的_id已经存在,如何将数组元素推送到数组,如果_id不存在,则创build新文档?
我使用Node.js
, mongoose
, mongodb
, express
和angular
。 我正在一个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