我正在使用Node.js
,mongoose
,mongodb
,express
和angular
。
我正在以mongoose模型保存对调查的回复。很多人会为特定调查提交回复。当第一个人提交调查答复时,我想为该调查创建一个新文档。当第二个,第三个....所以人们提交相同调查的回复时,我想只将数组元素添加到以下模式中的回复数组中。
当第一个人提交新调查的回复时,我想为新调查创建一个新文档。我怎么能在猫鼬中做到这一点?
我在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 :(得分: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,请尝试使用Schema()
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