Node.js 如果文档的"id"已经存在,如何将数组元素推送到数组中;如果"id"不存在,如何创建新文档';不存在?
我正在使用Node.js 如果文档的"id"已经存在,如何将数组元素推送到数组中;如果"id"不存在,如何创建新文档';不存在?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用Node.js,mongoose,mongodb,express和angular。 我正在保存答复,以便在猫鼬模型中进行调查。许多人会为某项调查提交答复。当第一个人提交调查回复时,我想为该调查创建一个新文档。当第二、第三。。。。因此,当人们为同一个调查提交回复时,我只想在下面的模式中将数组元素添加到回复数组中 当第一个人提交新调查的回复时,我想为新调查创建一个新文档。在猫鼬身上我该怎么做 我在他的书中发现了类似的问题但是,这里我想将新回复推送到下一个回复数组索引[]如果找到了_id,否
Node.js
,mongoose
,mongodb
,express
和angular
。
我正在保存答复,以便在猫鼬模型中进行调查。许多人会为某项调查提交答复。当第一个人提交调查回复时,我想为该调查创建一个新文档。当第二、第三。。。。因此,当人们为同一个调查提交回复时,我只想在下面的模式中将数组元素添加到回复数组中
当第一个人提交新调查的回复时,我想为新调查创建一个新文档。在猫鼬身上我该怎么做
我在他的书中发现了类似的问题但是,这里我想将新回复推送到下一个回复数组索引[]如果找到了_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("/");
});
});
将数据保存到数据库中:
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("/");
});
});
伪未测试代码
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时遇到问题,请尝试使用此模式()
如果{strict:false}
不起作用
请尝试
{strict:false,\u id:false}
或只是\u id:false
\u id
默认情况下实际上是隐式的,Mongoose尝试创建唯一的\u id
-请参阅。您想自己指定ID的具体原因是什么?您是否看到了yes GPX的可能副本。我正在将surveyId传递给_id。调查已创建。为调查创建的调查和答复的_id必须与您的答案相同。但是,我遇到了一些问题。push({replierId:“R002”,答案:[{questionId:“A002”},{response:“A001”}]});我修改了你的代码。对于最早的回复,它没有保存回复者ID和问题ID。对于第二个答复,请再次输入no replierId,并且在答复[]中没有任何内容。你能帮我吗?模式在上面的问题中。我上传了Robomongo模式的屏幕截图。如果接受,它将可见。如果在模式选项中添加strict:false会怎么样。任何变化。新建Schema({},strict:fasle)
Ok已编辑。strict用于保存不在模式中的内容,因此您可能会遇到这种问题。而且_idfalse我认为有助于不显示_id如果您使用自己的\u id
或告诉mongo不要生成自己的\u id