我想创建一个测验应用,并将结果存储在一个集合中(让我们说' QuizResults')。我也希望管理员能够创建“测验模板”,这些模板可以存储在一个集合中(让我们说“QuizTemplates'”)。管理员应该能够分配'针对特定用户的特定测验,我将在第三个集合中跟踪这些作业(让我们说'QuizAssignments')。
在QuizAssignments集合中,每个文档都有“AssignedTo”和“##用户参考,以及' TemplateForQuiz'作为对QuizTemplates'的参考。集合。
每个QuizResults文档都应该有QuizAssignment引用和QuizTemplate引用,但文档的其余部分应该由模板决定。
作为我正在思考的一个例子 - 试图简化以便不能正确写出:
QuizTemplates:
QuizTemplate1:
Labels: ["What is 2+2?", "How do you say happy birthday in French?"]
Formats: [Number, String]
QuizTemplate2:
Labels: ["How do you say happy birthday in German?", "What is 3+3?"]
Formats: [String, Number]
QuizAssignments:
User: Reference - User model
QuizTemplate: Reference - QuizTemplates model
QuizResults:
User: Reference - User model
AssignedIn: Reference - QuizAssignments model
Template: Reference - QuizAssignments model
/* for (let i = 0; i < this.template.Labels; i++) {
let qnNo = `${i + 1}`;
this["question" + i] = {};
this["question" + i].label = this.template.Labels[i];
this["question" + i].type = this.template.Formats[i];
} */
有没有人对实施此方法的最佳方法有任何想法?
答案 0 :(得分:0)
拥有mongodb的一个好处是你不需要任何特定的架构。因此,您的方法看起来更像是在理性数据库中。
你可以这样做:
QuizTemplates:
1:
Name: First template
Questions:
1:
Label:"What is 2+2?"
Format: Number
2:
Label: "How do you say happy birthday in French?"]
Format: String
2:
Name: Second template
Questions:
1:
Label:"What is 3+3?"
Format: Number
2:
Label: "How do you say happy birthday in German?"]
Format: String
Quizzes:
1:
User: Reference - User model
answers:
1:
Label: How do you say happy birthday in German?
Answer: Alles Gute zum Geburtstag
2:
Label: What is 3+3?
Answer: 9
您可以简单地将答案嵌入为嵌入式文档。此外,您不必明确存储格式。只显示输入,但无论如何都存储在模板中。模板不需要额外的参考,因为更改模板不会影响结果。如果您愿意,可以记录数据分析的名称或ID。
一个好的开始是阅读mongodb关于数据建模的文档https://docs.mongodb.com/manual/core/data-modeling-introduction/