猫鼬:如何从模式的虚拟属性中填充子属性

Mongoose: How to populate sub properties from within a schema's virtual properties

我有一个使用 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。

老实说,我不确定这是否可行,但我似乎无法在网上的任何地方找到明确的答案,所以我希望这里有人可以提供帮助。谢谢!

所以在猫鼬中你需要使用populate方法。

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

mongoose populate