猫鼬:如何从架构的虚拟属性中填充子属性

时间:2019-05-27 22:00:24

标签: mongodb mongoose mongoose-schema mongoose-populate

我有一个使用mongoose定义的mongodb模式,并且我有一些嵌套在多个级别上的子文档。我希望能够访问另一个模式的虚拟属性中的这些(填充的)子文档,但是我似乎无法这样做。我似乎能够在嵌套的第一级访问文档,但不能进一步访问。

这是我的模式的示例:


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}}]
}

我想做的是从SchemaA的虚拟属性内部访问SchemaC.types。

这是我想要实现的目标:


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似乎只是schemaC的objectId。

说实话,我不确定这是否可能,但我似乎无法在网上任何地方找到明确的答案,因此我希望这里的人能为您提供帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

因此在猫鼬中,您需要使用populate方法。

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

mongoose populate