2016-09-28 45 views
0

我想創建一個測驗應用程序,並將結果存儲在一個集合中(比如說'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

有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

所以,如果你不介意我總結(含在嘴裏冒着把字):1.忘掉架構的結果; 2.使用QuizTemplate文檔來配置表單; 3.將任何來自表格的數據插入特定鍵下的結果文檔; 這是對的嗎? –

+0

1.是的,您的應用有責任正確處理數據。例如,你可以在rails應用上使用ruby。那裏的模型的實現負責驗證和結構。是的。 3.是的,它是在1.中說的,這是你的應用程序的任務而不是數據庫。 –

+0

謝謝,只是想確保我理解正確。 –