Tuesday, 14 March 2017

Create Dynamic Mongoose Schema for Quiz Scoring - Right Way Practice

I have an application which allows admins to upload lessons and quizzes that links to each lesson (1 lesson, multiple quizzes).

User can then take lesson and answer the quizzes of that lesson.

Now, I am trying to store the score that they have gotten from completing the quizzes but I can't find the right way to do so with the best performance. Below is my markup, will it be any problem doing it this way?

Score Schema

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var answer = new Schema({
    choice: String,
    result: String
});

var quiz = new Schema({
    quiz_id: { type: Schema.Types.ObjectId, ref: 'Quiz', required: true },
    answer: [answer]
});

var lesson = new Schema({
    lesson_id: { type: Schema.Types.ObjectId, ref: 'Lesson', required: true },
    score: Number,
    quiz: [quiz],
    created_date: { type: Date, default: Date.now }
});

var score = new Schema({
    user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
    lesson: [lesson]
});

var Score = mongoose.model('Score', score);

module.exports = Score;

Quiz Schema

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var answer = new Schema({
    choice: String, //multiple choice answer
    result: String  //set true if that's the answer
});

var quiz = new Schema({
    question: { type: String, required: true },
    answer: [answer],
    image: [{ type: String, required: true }],
    lesson: { type: Schema.Types.ObjectId, ref: 'Lesson', required: true },
    created_by: { type: Schema.Types.ObjectId, ref: 'User', required: true },
    created_date: { type: Date, default: Date.now }
});

var Quiz = mongoose.model('Quiz', quiz);

module.exports = Quiz;

Lesson Schema

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var lesson = new Schema({
    video: { type: String, required: true },
    thumbnail: { type: String, required: true },
    title: { type: String, required: true },
    description: String,
    level: Number,
    lesson_number: Number,
    created_date: { type: Date, default: Date.now },
    activation: { type: Boolean, default: true },
    views: { type: Number, default: 0 },
    created_by: { type: Schema.Types.ObjectId, ref: 'User', required: true }
});

var Lesson = mongoose.model('Lesson', lesson);

module.exports = Lesson;



via Gene Lim

No comments:

Post a Comment