Mongoose: как заполнить подсвойства из виртуальных свойств схемы

У меня есть схема mongodb, определенная с использованием mongoose, и у меня есть некоторые поддокументы, вложенные в несколько уровней. Я хочу иметь доступ к этим (заполненным) вложенным документам в виртуальных свойствах другой схемы, но я не могу этого сделать. Кажется, я могу получить доступ к документам на первом уровне вложенности, но не ниже.

Вот пример моих схем:


const SchemaA = {
   name: {type: string}
   items: [
     {
      schemaB: {
       type: schema.type.ObjectId,
       ref: "B"
      }
     }
   ]
} 
const SchemaB = {
   name: {type: string}
   schemaC: {
       type: schema.type.ObjectId,
       ref: "C"
      }
}
const SchemaC = {
   types: [{label: {type: String}}]
}

Что я хочу сделать, так это получить доступ к SchemaC.types из виртуального свойства в SchemaA.

Вот чего я хочу добиться:


SchemaA.virtual("types").get(function(){
   return this.items.map(item => {
       return {name: item.schemaB.name, types: item.schemaB.SchemaC.types}
   })
})

Из приведенного выше item.schemaB кажется, что он заполняется просто отлично, но item.schemaB.SchemaC кажется просто objectId schemaC.

Честно говоря, я не уверен, возможно ли это вообще, но я не могу найти окончательного ответа нигде в Интернете, поэтому я надеюсь, что кто-то здесь может помочь. Спасибо!

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
188
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, в мангусте вам нужно использовать метод populate.

 .populate({
    path: 'schemaB',
    populate: {
      path: 'schemaC'
    }
  });

мангусты

Другие вопросы по теме