Найти тему

MongoDB. Many-to-many.

Посмотреть полный код можно здесь: https://github.com/SeverInvest/movies-explorer-api

Создадим БД, состоящую из двух коллекций (в mongoDB так называются таблицы): user и video.

Каждый пользователь может иметь несколько карточек с видео. Каждая карточка с видео может принадлежать нескольким пользователям. Классическая связь многие-ко-многим. Но только mongoDB - нереляционная СУБД, и здесь лучше реализовать такую связь не через промежуточную таблицу (которая содержит id обеих таблиц), а с помощью встроенных методов.

Итак, стандартные схемы моделей выглядят так:

user
user

video
video

Задача: нужно соединить таблицы следующим образом:
1. Каждое видео будет хранить ссылку на пользователя, который добавил это видео (отношение один-ко-многим)
2. Каждое видео будет хранить массив пользователей, которые лайкнули это видео. А Каждый пользователь будет хранить массив всех лайкнутых этим пользователем видео. (отношение многие-ко-многим)

Для реализации такого подхода нам нужно изменить схемы моделей:

1. для реализации соединения один-ко-многим добавить поле owner в коллекцию Video

-4

2. Для реализации соединения многие-ко-многим добавим в Коллекции такие вот поля:

User:

-5

Video:

-6

И теперь, чтобы данные в коллекциях были консистентны, добавим по такому коду в конец каждой модели:

User:

-7

Video:

-8

Этот код будет срабатывать, когда будет удален пользователь или видео - будут также удалены все ссылки на пользователя или видео в соответствующих коллекциях.