根据文档定义模式

时间:2016-09-28 12:10:00

标签: mongodb mongoose keystonejs

我想创建一个测验应用,并将结果存储在一个集合中(让我们说' 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];
} */

有没有人对实施此方法的最佳方法有任何想法?

1 个答案:

答案 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/

相关问题