保存/devise嵌套forms,根据mongoose模式,通过mongoose在mongodb中保存/更新数据

我创build了以下mongoose模式来保存mongodb中的测验 –

var answerSchema = new Schema({ answer: String, correct: Boolean }); var questionSchema = new Schema({ title: String, tag: String, chapterName: String, marks: Number, negativeMarks: Number, correctAnswerExplanation: String, hint: String, answers: [answerSchema] }); var quizSchema = new Schema({ courseId: Number, courseName: String, lectureId: Number, lectureName: String, popupTime: Number, teacherName: String, questions: [questionSchema] }); var Quiz = mongoose.model('quiz', quizSchema ); 

我能够以下面的方式存储硬编码值 –

 var quiz1 = new Quiz({ courseId: 4, lectureId: 5008, popupTime: 3, teacherName: 'Charles Xavier', questions: [ { "title": "Which is the Capital of India " , "answers": [ { "answer": "Delhi", "correct": true }, { "answer": "Bangalore", "correct": false }, { "answer": "Mumbai", "correct": false }, { "answer": "Chennai", "correct": false } ] }, { "title": "Where is facebook hosted? " , "answers": [ { "answer": "Heroku", "correct": true }, { "answer": "Digital Ocean", "correct": false }, { "answer": "AWS", "correct": true }, { "answer": "SWF", "correct": false } ] } ] }); quiz1.save(function(err, q) { console.log("Saved ----"); console.log(q); res.json(q); }); 

这工作得很好。

现在,创build一个GUI窗体的最好方法是,当用户填充细节时,它被转换成json,并通过mongoose保存在mongodb中。

我已经拿出了以下的forms –

 <form id="aj"> <input type="text" name="questions[0]" value="" placeholder="Question Title"> <input type="text" name="answers[0]" value="" placeholder="Answer 1"> <input type="text" name="answers[1]" value="" placeholder="Answer 2"> <input type="text" name="answers[2]" value="" placeholder="Answer 3"> <input type="text" name="answers[3]" value="" placeholder="Answer 4"> <button>Send</button> </form> 

然后在表单提交我使用这个剪切的序列化表单数据 –

 var o = {}; var a = $( "#aj" ).serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); 

而在快速路由处理程序,我保存在类似的方式 – 这就是我通过快递在请求的身体 –

 { questions: [ 'Q 1' ], answers: [ ' A 1', 'A 2', 'A 3', 'A 4' ] } var quiz = req.body(ie the above object) var add = new Quiz(quiz); add.save(function(err, quiz) { if(err) { console.log(err); } else { console.log("Saved"); console.log(quiz); } }); 

但是我收到以下错误 –

 [TypeError: Cannot use 'in' operator to search for '_id' in Q 1] 

我如何解决这个问题,请帮忙,因为我刚开始使用mongodb和mongoose,我来自SQL背景。

另外,我应该如何devise一个能够input多个问题的表单,每个问题都可以有多个答案,每个答案都有一点说明是否是正确的答案。