Как настроить взаимодействие между постами и категориями (Mongodb, Node.js)?

В проекте есть сущности, которые можно условно назвать постами, и есть сущности, которые можно назвать категориями. Например, пост представляет собой музыкальный альбом. И есть категории - 'артист', 'лейбл' и 'жанр'. Альбому можно присвоить несколько артистов, несколько лейблов и несколько жанров. Например, при создании поста в album.Schema использую поле такого вида:

artists: [
    {
       type: Schema.Types.ObjectId,
       ref: 'artists',
       required: true
    },
],


Аналогично с полями labels и genres. По сути в бд сохраняются id этих категорий.
А дальше - не очень понимаю, как мне вытащить названия и id указанных категорий при выводе? Например, я передаю на фронт список альбомов, и мне нужно, помимо собственно полей альбома передать не только id, но и названия категорий (артистов, лейблов и жанров).

Также у категорий есть свои страницы, и на них нужно передать список альбомов, которые связаны с этой категорией. Т.е., получается, при сохранении нового поста, нужно как-то обновить и записи категорий? Например, создал я пост Master of Puppets и в качестве категории artist присвоил ему (заранее созданную) запись 'Metallica'. И мне нужно, чтобы и пост master of Puppets оказался связан с записью Metallica, и запись metallica оказалась связанной с постом Master of Puppets.

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

Если я правильно понимаю, это называется many-to-many? Вопрос, в принципе, в том, что это вообще за операции, как лучше их делать, чтобы не перегружать сервер, и куда вообще копать? Может есть какие-то хорошие статьи/видосы, где можно узнать, как делать подобное? Ну или если (вдруг) это несложная рядовая операция, то буду признателен, если напишете в ответе.
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
@xirurgx3d
попробуйте использовать
populate
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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