MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Rekursive Suche in einer Sammlung in MongoDB

Ab MongoDB 3.4 können wir dies mit dem Aggregation Framework tun.

Die erste und wichtigste Phase in unserer Pipeline ist $graphLookup Bühne. $graphLookup ermöglicht es uns, rekursiv die Felder „parent“ und „name“ abzugleichen. Als Ergebnis erhalten wir die Vorfahren jedes "Namens".

Die nächste Stufe in der Pipeline ist $match Phase, in der wir einfach den "Namen" auswählen, an dem wir interessiert sind.

Die letzte Stufe ist der $addFields oder $project Phase, in der wir mithilfe von $map Array-Operator.

Natürlich mit dem $reverseArray Operator umkehren unser Array um das erwartete Ergebnis zu erhalten.

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" }
                    } 
                } 
            }
        }}
    ]
)