Что дает {type: mongoose.Schema.Types.ObjectId, ref: 'Модель'}?

Среди большого объема информации в свободном доступе по этой теме я не нашел ответа, явно мне не очевидного, на этот вопрос:

Cоздаю схему модуль mongoose. Вот что мне дает написание вот такой строки?

{type: mongoose.Schema.Types.ObjectId, ref: 'MountingElement'}

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

const MountingSurface = mongoose.Schema({
name: {
    type:String,
    unique:true,
    require:true
},
availableElements: [
    {type: mongoose.Schema.Types.ObjectId, ref: 'MountingElement'}
]})

и вот я с фронта сделал запрос => получил поверхности => и мне ведь нужно как-то отобразить какие саморезы доступны для каждой поверхности из списка, и чего мне делать с этими id-шниками? Мне нужно на уровне логики сервера дозапрашивать данные по каждому крепежу с базы данных, чтобы узнать как называется этот крепеж и прочие его характеристики? Никак это нельзя решить ещё на уровне базы данных, до сервера? мне получается неоднократно придется запрашивать один и тот же крепеж столько, ко скольким типам поверхностей он подходит? Если хранить в крепеже доступные поверхности то картина не поменяется. И вообще с таким же успехом я могу вместо этой конструкции, хранить просто id-шники в строке ну типо: availableElements: [{type: String}] и все, но тогда для чего же конструкция availableElements: [{type: mongoose.Schema.Types.ObjectId, ref: 'MountingElement'}] придумана? Крепежа много, и монтируемых поверхностей много, и те и те редактируется отдельно, поэтому необходимо их так разделять на отдельные схемы


Ответы (1 шт):

Автор решения: Петр Иванов

как написал Yaant в комментарии: по этой ссылке - https://mongoosejs.com/docs/populate.html вся исчерпывающая информация

→ Ссылка