sql >> Database >  >> NoSQL >> MongoDB

MongoDB-schemaontwerp voor vragen en antwoorden met meerdere keuzes

Ik heb een mangoestschema gemaakt voor elke vereiste details. Je kunt er hulp van krijgen. Ik heb uw vereisten een beetje geanalyseerd en modellen toegevoegd voor veel schema's, eerste vraagschema, geëxporteerd als een model

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);

en hier in het QuestionSchema , ik heb een AnswerOptionSchema . ingesloten als

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
});

Met behulp van deze schema's heb ik een QuestionSetSchema . gemaakt om een ​​set vragenschema's toe te voegen als

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);

Nu voorbereid met de vraag, antwoordopties en de set, moet nu het kandidaatschema ontwerpen,

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);

Hier zult u merken dat ik ook de totale poging van de kandidaat bereken en de antwoorden voor elke set die door hem is gegeven in de CandidateQuesAnswer model. Dit model heeft de structuur als

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);

Waar ik pre save . heb gebruikt haken geleverd door mongoose , voordat u het document opslaat en de waarden berekent om de kandidaat wel of niet te laten slagen.



  1. MongoDB - Unieke index versus samengestelde index

  2. Verschil krijgen in seconden van twee datums in JavaScript

  3. RedisClient LUA API's

  4. MongoError:niet gemachtigd om opdracht uit te voeren { find:app_updates, filter:{ key:0.0.1-admins }, limit:1, batchSize:1, singleBatch:true }