sql >> データベース >  >> NoSQL >> MongoDB

複数選択の質問と回答のためのMongoDBスキーマ設計

    必要な詳細ごとにマングーススキーマを作成しました。あなたはそれから助けを得ることができます。私はあなたの要件を少し分析し、モデルとしてエクスポートされた多くのスキーマ、最初の質問スキーマのモデルを追加しました

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

    そしてここQuestionSchemaAnswerOptionSchemaを埋め込みました として

    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によって提供されるフック 、ドキュメントを保存し、値を計算して候補者の合格または不合格を宣言する前。



    1. MongoDBのISODate()とUNIXタイムスタンプ

    2. SolrでmongoDBを使用する方法は?

    3. mongoidRailsを介したmongodbスクリプトの実行

    4. PyMongo-正規表現によるコレクションからのサブドキュメントの選択