【问题标题】:Defining a schema based on a document基于文档定义模式
【发布时间】:2016-09-28 20:39:59
【问题描述】:

我想创建一个测验应用程序,并将结果存储在一个集合中(比如说“QuizResults”)。我还希望管理员能够创建“测验模板”,它可以存储在一个集合中(比如说“测验模板”)。管理员应该能够将特定测验“分配”给特定用户,我将在第三个集合中跟踪这些分配(比如说“测验分配”)。

在 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 mongoose keystonejs


    【解决方案1】:

    拥有 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/

    【讨论】:

    • 所以如果你不介意我总结一下(并且冒着把话放在嘴里的风险): 1. 忘记结果的架构; 2. 使用 QuizTemplate 文档配置表单; 3. 将来自表单的任何数据插入到特定键下的结果文档中;对吗?
    • 1.是的,您的应用负责正确处理数据。例如,您可以有一个 ruby​​ on rails 应用程序。那里的模型的实现负责验证和结构。 2. 是的。 3. 是的,在 1 中说。这是您的应用程序的任务,而不是数据库。
    • 谢谢,只是想确保我理解正确。
    猜你喜欢
    • 2014-03-26
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2010-09-06
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多