我有3个收藏:
学校
{ "id" : { "$numberLong" : "100000" },
"name" : "School1" }
系
{ "id" : { "$numberLong" : "100000" },
"schoolId" : { "$numberLong" : "100000" },
"name" : "Faculty1" }
主题
{ "id" : { "$numberLong" : "100000" },
"name" : "Subject1" }
假设每个集合中有很多这些。我希望能够提供一个接收ID的端点并返回完整的3层层次(学校 - > Faculty-> Subject)。我将如何返回所有这些数据。
类似的东西:
{
id: 1,
name: "school1",
faculties: [{
id:1000,
name: "faculty1",
subjects: [
{id: 1, name: "sub1"},
{id: 2, name: "sub2"},
{id: 3, name: "sub3"}
]
}]
}
答案 0 :(得分:1)
.pot
答案 1 :(得分:0)
好久以后我实际上得到了解决方案,这比兔子洞要简单得多。
{ $match: {id: 100001}},
{ $lookup:
{
from: 'faculties',
localField: 'id',
foreignField: 'schoolId',
as: 'faculties',
}
},
{ $unwind: {
path: "$faculties",
preserveNullAndEmptyArrays: true
}
},
{ $lookup:
{
from: 'subjects',
localField: 'faculties.id',
foreignField: 'facultyId',
as: 'faculties.subjects',
}
}
返回我想要的确切输出。关键是最终查找返回as: 'faculties.subjects'
,将主题放入院内,这是学校的第一个孩子。
如果您需要进一步嵌套,每次深入时只需要as: faculties.subjects.students.names