Разработка схемы MongoDB для вопросов и ответов по выбору множества - PullRequest
0 голосов
/ 07 сентября 2018

Я не разбираюсь в проектировании MongoDB, и мне нужна помощь в проектировании БД.Какова наилучшая структура для хранения вопросов с вариантами ответов и ответов от кандидата ?

- Каждый кандидат получит набор из 12 вопросов, если кандидат не сдаст первый экзамен, он может пройти еще 2 экзамена.Таким образом, на каждом экзамене кандидат должен каждый раз получать разные наборы вопросов.

-Ответ каждого кандидата для каждого теста должен быть записан с оценкой из 12, поскольку каждый набор вопросов равен 12.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я создал схему мангуста для каждой необходимой детали. Вы можете получить помощь от этого. Я немного проанализировал ваши требования и добавил модели для многих схем, схема первого вопроса, экспортированная как модель

import { Schema } from 'mongoose';
import { AnswerOptionSchema } from './answer-option-schema';
const mongoose = require('mongoose');

export const QuestionSchema: Schema = new Schema({
  question: {
    type: String,
    minlength: 10,
    maxlength: 1000,
  },
  answerOptions: {
    type: [AnswerOptionSchema],
    default: undefined,
    validate: {
      validator: function(value: any) {
        return value && value.length === 4;
      },
      message: 'Answer options should be 4.'
    }
  }
}, {
  timestamps: true
});

export const Question = mongoose.model('Question', QuestionSchema);

и здесь, в QuestionSchema, я вставил AnswerOptionSchema как

import { Schema } from 'mongoose';

export const AnswerOptionSchema: Schema = new Schema({
  optionNumber: {
    type: Number
  },
  answerBody: {
    type: String,
    minlength: 1,
    maxlength: 200,
  },
  isCorrectAnswer: { // you can store the correct answer with question id in another model.
    type: Boolean,
    default: false
  }
}, {
  _id: false
});

С помощью этих схем я создал QuestionSetSchema для добавления набора схем вопросов как

import { Schema } from "mongoose";
import { QuestionSchema } from "./question-schema";
const mongoose = require('mongoose');

export const QuestionSetSchema: Schema = new Schema({
  questionSet: {
    type: [QuestionSchema],
    validate: {
      validator: function(value: any) {
        return value.length === 12;
      },
      message: 'Question set must be 12.'
    }
  },
}, {
  timestamps: true
});

export const QuestionSet = mongoose.model('QuestionSet', QuestionSetSchema);

Теперь подготовлено с вопросом, вариантами ответа и набором, теперь нужно разработать схему кандидата,

import { Schema } from "mongoose";
const mongoose = require('mongoose');

export const CandidateSchema: Schema = new Schema({
  name: String,
  email: String, // you can store other candidate related information here.
  totalAttempt: {
    type: Number,
    default: 0,
    validate: {
      validator: function(value: number) {
        return value === 3;
      },
      message: 'You have already done three attempts.'
    }
  },
  candidateQuestionAnswers: {
    type: [Schema.Types.ObjectId],
    ref: 'CandidateQuesAnswer'
  }
}, {
  timestamps: true
});

export const Candidate = mongoose.model('Candidate', CandidateSchema);

Здесь, вы заметите, я также вычисляю totalAttempt кандидата и ответы для каждого набора, данного им в модели CandidateQuesAnswer. Эта модель имеет структуру типа

import { Schema } from "mongoose";

export const CandidateQuesAnswerSchema = new Schema({
  candidate: {
    type: Schema.Types.ObjectId,
    ref: 'Candidate'
  },
  questionSet: {
    type: Schema.Types.ObjectId,
    ref: 'QuestionSet'
  },
  questionAnswers: {
    type: [Number] // You can add answer schema
  },
  totalScore: {
    type: Number
  },
  isPassed: {
    type: Boolean,
    default: false
  }
}, {
  timestamps: true
});

CandidateQuesAnswerSchema.pre('save', function updateTotalScore(next) {
  // update total score of the candidate here based on the correct questionAnswers and
  // questionSet.
  next();
});

CandidateQuesAnswerSchema.pre('save', function updateIsPassed(next) {
  // update the isPassed based on the totalScore obtained by the candidate.
  next();
});

export const CandidateQuesAnswer = mongoose.model('CandidateAnswer', CandidateQuesAnswerSchema);

Там, где я использовал pre save перехватчики, предоставленные mongoose, перед сохранением документа и вычислением значений для объявления кандидата пройденным или неудачным.

0 голосов
/ 07 сентября 2018

Вот основной синтаксис, который вы можете использовать:

Сначала вам нужно потребовать мангуста вот так: var mongoose = require ('mongoose');

Тогда вам нужно создать схему следующим образом:

var studentSchema = mongoose.Schema ({ имя: строка, электронная почта: строка, });

И последний шаг - создать такую ​​модель: var student = mongoose.model ('student', studentSchema);

Вот и все: Это основная структура. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...