sql >> Base de Datos >  >> NoSQL >> MongoDB

Búsqueda recursiva en una colección en MongoDB

A partir de MongoDB 3.4, podemos hacer esto con Aggregation Framework.

La primera y más importante etapa en nuestra tubería es el $graphLookup escenario. $graphLookup nos permite hacer coincidir recursivamente el campo "padre" y "nombre". Como resultado, obtenemos los antepasados ​​de cada "nombre".

La siguiente etapa en la canalización es $match etapa donde simplemente seleccionamos el "nombre" que nos interesa.

La etapa final es $addFields o $project etapa donde aplicamos una expresión a la matriz "antepasados" usando el $map operador de matriz.

Por supuesto, con $reverseArray operador nosotros invertir nuestra matriz para obtener el 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" }
                    } 
                } 
            }
        }}
    ]
)