Задать вопрос
Grapeoff
@Grapeoff
В чём концепция...?

Можно ли хранить ссылки на документы другой коллекции в MongoDB и является ли это оптимальным решением в данной ситуации?

Доброго времени суток всем

Сейчас занимаюсь разработкой нетривиальной CRM системы и возникли небольшие сложности в правильной проектировке базы данных.

Начнём с небольшого введения.
База данных - MongoDB
Сервер - NodeJS
ODM - Mongoose + Typegoose (проект на typescript)
CRM система разрабатывается для онлайн школы.

Итак, у нас есть сама база данных, и она подразделяется на две коллеции: Pupils и Groups
60b921c879610786191373.jpeg

В коллекции Pupils хранятся документы такого формата:
60b922eae95dd650689909.png

А в коллекции Groups хранятся вот такие документы:
60b928faed3b4837271591.jpeg

Итого: есть 2 сущности — ученики и группы, в которых они будут учиться.

Как вы могли заметить, в объекте группы присутствует поле PUPILS, в котором и хранятся ученики, обучающиеся в этой группе. Но не конкретно сами объекты учеников, а их ID в коллекции Pupils.
Я отказался от дублирования этих объектов из коллекции учеников в группы, т.к. мне сказали, что повторяющиеся данные в двух разных коллекциях — это плохо.

То есть в БД получаем вот такой объект:
60b92552a9b0d415912995.jpeg

Но когда фронтенд будет отрисовывать страницу, ему в итоге будет нужно вначале получить по API объект группы, потом сделать ещё один запрос на получение объектов учеников из массива.

Может быть это и не звучит ужасно, но расписание нужно хранить для каждого ученика отдельно, и ещё куча всяких нюансов, которые я даже перечислять не буду, чтобы не отвлекатся от главных двух проблем.

Проблема 1:
Можно ли, чтобы эти идентификаторы были ссылками на объекты из коллекции Pupils? Чтобы в базе данных они хранились как:
["id1", "id2", "id3"]
но когда я делаю запрос на получение групп/конкретной группы, база данных возвращала бы мне объект такого вида:
60b927679dd42718507899.jpeg
Где
{
...
}
и есть
60b9277fef959818303081.png

Проблема 2
Если такая возможность есть, то можно ли дополнять эту ссылку своими данными? Чтобы в итоге в коллекции групп были такие данные:
60b928af8cfda706020507.jpeg
Чтобы в итоге этот Reference разворачивался в объект ученика и к нему добавлялись вот эти поля.
  • Вопрос задан
  • 477 просмотров
Подписаться 2 Сложный 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@romicohen
Системный Архитектор
Мнение дилетанта (в Монге): для таких проектов лучше не брать noSQL базу. Возьмите обычный MySQL или типа того. Там все подобные вопросы относятся к разряду риторических :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы