MongoDB 3.4以降、これはAggregationFrameworkを使用して実行できます。
パイプラインの最初の最も重要な段階は、 $graphLookup
ステージ。 $graphLookup
「親」フィールドと「名前」フィールドを再帰的に照合できます。その結果、各「名前」の祖先を取得します。
パイプラインの次の段階は、 $match
です。
興味のある「名前」を選択するだけのステージ。
最終段階は、 $addFields
です。
または$project
$map
配列演算子。
もちろん、 $reverseArray
を使用します
演算子私たちは
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" }
}
}
}
}}
]
)