必要な詳細ごとにマングーススキーマを作成しました。あなたはそれから助けを得ることができます。私はあなたの要件を少し分析し、モデルとしてエクスポートされた多くのスキーマ、最初の質問スキーマのモデルを追加しました
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);
save
の前に使用した場所 mongoose
によって提供されるフック 、ドキュメントを保存し、値を計算して候補者の合格または不合格を宣言する前。