基于文档定义模式
Defining a schema based on a document
我想创建一个测验应用程序,并将结果存储在一个集合中(假设 'QuizResults')。我还希望管理员能够创建 'quiz templates',它可以存储在一个集合中(比方说 'QuizTemplates')。管理员应该能够 'assign' 特定用户的特定测验,我将在第三个集合中跟踪这些分配(假设 '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];
} */
有没有人对实现这个的最佳方式有任何想法?
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/
我想创建一个测验应用程序,并将结果存储在一个集合中(假设 'QuizResults')。我还希望管理员能够创建 'quiz templates',它可以存储在一个集合中(比方说 'QuizTemplates')。管理员应该能够 'assign' 特定用户的特定测验,我将在第三个集合中跟踪这些分配(假设 '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];
} */
有没有人对实现这个的最佳方式有任何想法?
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/