2016-09-28 3 views
0

私はクイズアプリを作成し、結果を単一のコレクションに保存したいと思います(「QuizResults」としましょう)。また、管理者がコレクションに保存できる「クイズテンプレート」を作成できるようにしたいと思います(「QuizTemplates」としましょう)。管理者は特定のユーザーに特定のクイズを「割り当てる」ことができます。これらの割り当てを第3のコレクションで追跡します(「QuizAssignments」としましょう)。文書に基づいてスキーマを定義する

QuizAssignmentsコレクションでは、各ドキュメントに 'AssignedTo'ユーザーリファレンスがあり、 'QuizTemplates'コレクションへの参照として 'TemplateForQuiz'があります。

各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を使用する利点の1つは、特定のスキーマを必要としないという事実です。したがって、あなたのアプローチは合理的なデータベースのように見えます。

次のようにそれを行うことができます:

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.はい、あなたのアプリはデータを適切に処理する責任があります。例えば、あなたはレールアプリでルビーを持つことができます。モデルの実装は、検証と構造を担当します。 2.はい。 3.それは1で言いました。それはデータベースではなくアプリケーションのタスクです。 –

+0

ありがとう、ちょうど私が正しく理解したことを確認したかった。 –

関連する問題