mongoose中的populate方法可以返回一个树形结构的数据

rqenqsqc  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(153)

我有一个带有父引用的模型树结构,这是我的模式文件:

export class Menu {
...
  @Prop({ type: Types.ObjectId, ref: 'Menu' })
  childrens: Menu[];
}
export const MenuSchema = SchemaFactory.createForClass(Menu);

字符串
数据库中的一些数据:

[
  {
    _id: ObjectId('menu1'),
    name: 'menu1',
    ...
    childrens: [ObjectId['menu1-1']],
  },
  {
    _id: ObjectId('menu1-1'),
    name: 'menu1-1',
    ...
    childrens: [ObjectId['menu1-1-1']],
  },
  {
    _id: ObjectId('menu1-1-1'),
    name: 'menu1-1-1',
    ...
  }
]


现在我使用populte来查询数据。

this.menuModel.findOne({_id:ObjectId('menu1')}).polulate('childrens');


它返回:

{
  "_id": "menu1",
  "name": "menu1",
  ...,
  "childrens":[
    {
      "_id": "menu1-1",
      "name": "menu1-1",
      ...
      "childrens":["menu-1-1"]
    }
  ]
}


menu1-1中的childrens不是一个Menu模型列表,只是一个ObjectId列表,为什么?populate方法不能构建树结构?如果不能,我可以创建一个查询,使它返回一个树吗?我已经用$graphLookup方法尝试了aggregate,但似乎它也不工作。

kgsdhlau

kgsdhlau1#

您可以populate嵌套数据到您想要的深度,并实现所需的结果,如下所示:

this.menuModel.findOne({_id:ObjectId('menu1')}).polulate({
   path: 'childrens'
   populate: { // Populate the populated documents 
      path: 'childrens' 
   }
});

字符串

相关问题