Mulai dari MongoDB 3.4, kita dapat melakukannya dengan Kerangka Agregasi.
Tahap pertama dan terpenting dalam alur kami adalah $graphLookup
panggung. $graphLookup
memungkinkan kita untuk mencocokkan secara rekursif pada bidang "induk" dan "nama". Hasilnya, kami mendapatkan nenek moyang dari setiap "nama".
Tahap berikutnya dalam pipeline adalah $match
tahap di mana kita cukup memilih "nama" yang kita minati.
Tahap terakhir adalah $addFields
atau $project
tahap di mana kita menerapkan ekspresi ke larik "leluhur" menggunakan $map
operator larik.
Tentu saja dengan $reverseArray
operator kami membalikkan array kami
agar mendapatkan hasil yang diharapkan.
db.collection.aggregate(
[
{ "$graphLookup": {
"from": "collection",
"startWith": "$parent",
"connectFromField": "parent",
"connectToField": "name",
"as": "ancestors"
}},
{ "$match": { "name": "D" } },
{ "$addFields": {
"ancestors": {
"$reverseArray": {
"$map": {
"input": "$ancestors",
"as": "t",
"in": { "name": "$$t.name" }
}
}
}
}}
]
)