Несколько поддокументов в Mongoose - PullRequest
0 голосов
/ 30 марта 2020

Возможно ли иметь несколько разных поддокументов? Пн goose? Я создаю приложение для онлайн-тестов, и у каждого теста будет массив вопросов, содержащий различные типы вопросов, например, true / false, множественный выбор, сопоставление и т. Д. c ... Я хочу создать различные схемы вопросов и массив вопросов для содержать их всех. Например questions: [QuestionSchema1, QuestionSchema2]. Возможно ли это сделать?

Пример схемы с типом вопроса basi c внизу. А что, если я хочу добавить другой тип вопроса для этого теста?

const testSchema = new mongoose.Schema({
  name: {
    type: String
  },
  level: {
    type: String
  },
  questions: [
    {
      id: {
        type: String
      },
      question: {
        type: String
      },
      answers: [
        {
          id: {
            type: String
          },
          answer: {
            type: String
          }
        }
      ],
      validAnswerId: {
        type: String
      }
    }
  ]
});

1 Ответ

0 голосов
/ 31 марта 2020

Если вы действительно хотите сделать это с вложенными документами, вы можете просто напечатать вопросы в виде массива объектов и поместить в него все, что вы хотите:

...
questions: [{
  type: Object
}],
...

Если у вас все в порядке с созданием нескольких коллекций, вы можете используйте mongooses refPath, чтобы сделать это с более строгими схемами:

...
questions: [{
  question: {
    type: ObjectId,
    refPath: 'questions.questionType'
  },
  questionType: {
    type: String,
    enum: ['MultipleChoice', 'Matching', ...]
 },
}]
...

Затем вы можете создать все различные схемы для ваших вопросов и добавить их модели (например, 'MultipleChoice' и 'Matching') к перечислению questionType. Впоследствии, когда вам нужно получить доступ к вопросам, вы просто заполняете их .populate('questions') в объекте запроса.

...