MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pesquisa recursiva em uma coleção no MongoDB


A partir do MongoDB 3.4, podemos fazer isso com o Aggregation Framework.

O primeiro e mais importante estágio do nosso pipeline é o $graphLookup palco. $graphLookup nos permite combinar recursivamente no campo "pai" e "nome". Como resultado, obtemos os ancestrais de cada "nome".

O próximo estágio no pipeline é o $match etapa em que simplesmente selecionamos o "nome" que nos interessa.

O estágio final é o $addFields ou $project estágio em que aplicamos uma expressão ao array "ancestors" usando o $map operador de matriz.

Claro que com o $reverseArray operador nós invertemos nossa matriz para obter o resultado esperado.
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" }
                    } 
                } 
            }
        }}
    ]
)