У меня есть схема 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.
Честно говоря, я не уверен, возможно ли это вообще, но я не могу найти окончательного ответа нигде в Интернете, поэтому я надеюсь, что кто-то здесь может помочь. Спасибо!
Итак, в мангусте вам нужно использовать метод populate
.
.populate({
path: 'schemaB',
populate: {
path: 'schemaC'
}
});