MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Recherche récursive sur une collection dans MongoDB

À partir de MongoDB 3.4, nous pouvons le faire avec le cadre d'agrégation.

La première et la plus importante étape de notre pipeline est le $graphLookup organiser. $graphLookup nous permet de faire correspondre de manière récursive les champs "parent" et "name". En conséquence, nous obtenons les ancêtres de chaque "nom".

La prochaine étape du pipeline est le $match étape où nous sélectionnons simplement le "nom" qui nous intéresse.

La dernière étape est le $addFields ou $project étape où nous appliquons une expression au tableau "ancestors" en utilisant le $map opérateur de tableau.

Bien sûr avec le $reverseArray opérateur nous inversons notre tableau afin d'obtenir le résultat escompté.

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