我正在尝试在MEAN堆栈的帮助下制作一个测验应用程序。在尝试所有问题之后,将提交按钮以提交所有已检查的单选按钮。对于option1,它应该是1,对于option2它应该是是2.目前我的答案mongoose模型看起来像这样 -
const answerSchema = new Schema({
userEmail: {
type: String, require:true
},
testId: {
type: String, require:true
},
questionId: {
type: String, require:true
},
userAnswer: {
type: String
},
correctAnswer: {
type: String, require:true
},
timeTakenEach: {
type: Number,
default: 1
} //insecs
})
我应该对猫鼬模型进行任何更改,因为在提交后我必须将useranswer与正确的答案进行比较。我觉得useranswer和correctanswer字段应该是一个数组,以便所有选中的问题选项可以存储一个另一方面,如何为所有问题一次性提交所有测试数据。我的angularjs控制器功能逻辑应该是什么样的。
答案 0 :(得分:1)
实际上,您可以为角度中的所有测试问题提供一组对象。完成每个问题后,继续将对象推送到此数组。
[
{
questionId: 123,
userAnswer: 1,
...
},
{
questionId: 123,
userAnswer: 1,
...
},
];
最后,当测试完成后,将其提交给API。另一方面,保持架构的结构。不要像电子邮件那样保留冗余数据。您可以按如下方式简化此操作。
answerSchema = {
userInfo: {
name: 'abc',
email: 'abc@xyz.com',
attemptedOn: ...,
...
},
testMetaData: {
testId: 1,
testName: 'ABC Test',
...
},
attemptedAnswers: [{
questionId: 1,
attemptedAnswer: 2
},
...
]
};
答案 1 :(得分:0)
最好不要在answerSchema中包含correctAnswer
,而是将其放在单独的集合中,因为它会为每个用户在数据库中留出额外的空间
const answerSchema = new Schema({
userEmail: {
type: String, require: true
},
testId: {
type: String, require: true
},
questionId: {
type: String, require: true
},
userAnswer: {
type: String
},
timeTakenEach: {
type: Number,
default: 1
} //insecs
});
const questionAnswer = new Schema({
questionId: {
type: String, require: true
},
correctAnswer: {
type: String, require: true
},
});