我有一个带有父引用的模型树结构,这是我的模式文件:
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
,但似乎它也不工作。
1条答案
按热度按时间kgsdhlau1#
您可以
populate
嵌套数据到您想要的深度,并实现所需的结果,如下所示:字符串