<aside> ✅ Hierarchy 구조 (Tree 구조)
Graph 형태의 데이터 ex. 회사의 결재선, 쇼핑몰 카테고리, SNS
</aside>
db.employees.insertMany([
{
_id: 1,
name: "유진",
position: "CEO"
},
{
_id: 2,
name: "서원",
position: "지각쟁이",
reportsTo: "유진"
},
{
_id: 3,
name: "동히",
position: "난초물주기",
reportsTo: "서원"
},
{
_id: 4,
name: "문규",
position: "개발자 및 기획자 및 디자이너",
reportsTo: "동히"
}
])
// graphLookup을 이용하면 계층 구조를 쉽게 나타낼 수 있음
> db.employees.aggregate([
... {
... $graphLookup: {
... from: "employees", // 재귀 형식
... startWith: "$reportsTo",
... connectFromField: "reportsTo",
... connectToField: "name",
... depthField: "depth",
... as: "reportingHierarchy"
... }
... }
... ])
[
{ _id: 1, name: '유진', position: 'CEO', reportingHierarchy: [] },
{
_id: 2,
name: '서원',
position: '지각쟁이',
reportsTo: '유진',
reportingHierarchy: [ { _id: 1, name: '유진', position: 'CEO', depth: Long("0") } ]
},
{
_id: 3,
name: '동히',
position: '난초물주기',
reportsTo: '서원',
reportingHierarchy: [
{ _id: 1, name: '유진', position: 'CEO', depth: Long("1") },
{
_id: 2,
name: '서원',
position: '지각쟁이',
reportsTo: '유진',
depth: Long("0")
}
]
},
{
_id: 4,
name: '문규',
position: '개발자 및 기획자 및 디자이너',
reportsTo: '동히',
reportingHierarchy: [
{ _id: 1, name: '유진', position: 'CEO', depth: Long("2") },
{
_id: 3,
name: '동히',
position: '난초물주기',
reportsTo: '서원',
depth: Long("0")
},
{
_id: 2,
name: '서원',
position: '지각쟁이',
reportsTo: '유진',
depth: Long("1")
}
]
}
]