MongoDB дизайн-модель для категории и подкатегории - PullRequest
0 голосов
/ 21 апреля 2020

Привет, ребята. У меня проблема с MongoDB, я не знаю, как спроектировать БД для поддержки категорий и подкатегорий ...

Поэтому я пытаюсь создать приложение для викторины с двумя моделями:

Модель вопроса

  • Я буду содержать вопрос

Категория модели

  • Он содержит категорию, в которой вопрос будет

Это то, что я пытаюсь выполнить sh, я хочу создать приложение Quiz, приложение Quiz будет иметь 3 основные категории: A категория, B категория и C category ...

Примечание. У меня не будет более 20 подкатегорий в каждой категории

И каждая из этих категорий будет иметь свои собственные подкатегории, например: «Категория» будет содержать Test1, Test2, Test3, Test4, Test5 ... то же самое для «категории B», она будет содержать Test1, Test2, Test3, Test4 ....

Примечание: I не будет иметь более 3 основных категорий

И каждая из этих подкатегорий Test1, Test2 будет продолжать В списке вопросов

Итак, я основал свою модель следующим образом:

Категория модели:

export const CategorySchema = new mongoose.Schema({
  parent: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Category"
  },
  name: { type:String, required:true },
  slug: String,
});

Модель вопроса:

export const QuestionSchema = new mongoose.Schema({
  question: { type:String, required:true },
  options: [String],
  answers: Array,
  category: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Category"
  }
});

С одним дополнительным уловом я хотел бы, чтобы Вопрос был частью различных подкатегорий, как если бы он мог быть частью A категория> Тест 1, категория B> Тест 2, категория> Тест 3, , чтобы я мог повторно использовать его между различными подкатегориями

Мой вопрос: это правильный способ создания базы данных? Или есть какой-то другой способ

1 Ответ

1 голос
/ 22 апреля 2020

Я использую ссылку, что Категория и Тест вместе образуют коллекцию tests, а вторая коллекция - questions. Я могу придумать две модели, и выбор зависит от вашего запроса и потребностей приложения.

Модель 1:

tests:
    id: "A-Test1"
    category: "A",
    test: "Test1",
    name / description: "...",
    questions: [ "q1", "q2", "q15", "q16", "q25", ... ]

questions:
   id: "q1",
   details: { question: "...", options: [...], answer: [...] }

Вы хотите найти все вопросы для категорий «A» и «Test2»:

  • Запросите сборник тестов и получите вопросы.
  • Получите подробности вопроса из набора вопросов; это будет запрос «соединения» с использованием этапа агрегирования $lookup.

Вы хотите знать, относится ли вопрос к каким категориям / тестам:

  • Запрос массив вопросов коллекции тестов.
  • Для получения более подробной информации о вопросе найдите коллекцию вопросов.


Модель 2:

tests:
    id: "A-Test1"
    category: "A",
    test: "Test1",
    name / description: "..."

questions:
   id: "q1",
   details: { question: "...", options: [...], answer: [...] },
   tests: [ "A-Test1", "A-Test5", "C-Test2", ... ]

Требуется найти все вопросы для «A» и «Test2»:

  • Запрос к коллекции вопросов в массиве tests.
  • Более подробную информацию можно найти в коллекции тестов. о тесте.

Вы хотите знать, к каким категориям / тестам относится вопрос:

  • Запросить коллекцию вопросов в массиве tests.
  • Поиск коллекции тестов для получения более подробной информации о каждом тесте.
...