Как правильно построить структуру mongodb + mongoose?

Привет. Решил сделать RestAPI для диплома на nodejs + express + mongodb (mongoose).
Уже 3 раза пересматривал структуру коллекций в монго, но никак не могу найти оптимальную. Тема диплома автоматизированный паркинг.
Пробовал так: Есть 3 коллекции (авто, пользователи и собственно список въездов\выездов).
Коллекция авто: айди авто, номер авто, цвет (может еще какие-то параметры)
Коллекция пользователи: имя, фамилия, дата рождения, дата добавления в базу и (массив с айди авто)?
Коллекция въездов\выездов: айди авто, дата-время, тип(въезд\выезд)

При условии что у пользователя может быть больше 1 авто и что авто может быть без прикрепленного пользователя.
Но не понимаю как потом связать эти коллекции что бы через RestAPI получить, например список авто, принадлежащих пользователю? или например статистику въездов\выездов по всем номерам авто пользователя?
Какое должно быть ключевое поле? По идеи айди авто, но у пользователя будет лежать массив из этих айди, как по ним всем получить информацию?

Пробовал схему, когда внутри у пользователя лежит информация по авто, но тогда получается что авто не может быть без прикрепленного пользователя.
Знаю что в mongoose есть "Population", но как ими пользоваться, если у тебя в 1 таблице массив из строк, а в другой строка. Спасибо.
  • Вопрос задан
  • 277 просмотров
Пригласить эксперта
Ответы на вопрос 1
@RidgeA
У в документе в коллекции пользователя - массив с id записей из коллекции авто - те, автомобили. которые принадлежат пользователю.
При такой схеме может быть сложно вытянуть машины не привязанные к пользователю - что бы это упросить можно привязывать все бесхозные машины к "виртуальному пользователю".

Вообще описанная задача, ИМХО, гораздо лучше ложиться на реляционные бд.

Join в mongodb нет. Есть похожий аналог lookup, но может не подойти.
в крайнем случае надо будет join-ить в коде: получить пользователя - получить все авто пользователя - получить статистику визитов по всем авто пользователя.

Как-то так...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы