Počínaje MongoDB 3.4 to můžeme udělat pomocí Aggregation Framework.
První a nejdůležitější fází v našem kanálu je $graphLookup
etapa. $graphLookup
nám umožňuje rekurzivně porovnat pole „rodič“ a „jméno“. Výsledkem je, že získáme předky každého "jména".
Další fází v procesu je $match
fázi, kdy jednoduše vybereme "jméno", které nás zajímá.
Poslední fází je $addFields
nebo $project
fázi, kdy aplikujeme výraz na pole "předků" pomocí $map
operátor pole.
Samozřejmě s $reverseArray
operátor obrátí naše pole
abyste dosáhli očekávaného výsledku.
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" }
}
}
}
}}
]
)