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

¿Cómo consultar la estructura del árbol recursivamente con MongoDB?

Según su caso de uso, MongoDB v3.4 proporciona una canalización de agregación operador llamado $graphLookup . El operador de agregación puede realizar una búsqueda recursiva en una colección. Ver más definición en $graphLookup definición .

Usando la jerarquía de documentos y los valores anteriores como ejemplos, podría intentar ejecutar debajo de la agregación:

db.collectionName.aggregate([

                {$unwind:{
                        path:"$childrenIdList", 
                        preserveNullAndEmptyArrays: true}
                  }, 
                {$graphLookup:{
                        from:"collectionName", 
                        startWith:"$_id", 
                        connectFromField:"_id", 
                        connectToField:"childrenIdList", 
                        as:"myparents",  
                        restrictSearchWithMatch: {"_id"}}
                  }, 
                {$match: {"_id": 7 } },
                {$group:{
                        _id:"$_id", 
                        parents:{$addToSet:"$myparents._id"}
                  }}
]);

Lo anterior debería devolver el resultado de la siguiente manera:

{ "_id" : 7, "parents" : [ [ 1, 2, 4 ] ] }

Habiendo dicho eso, si tiene una gran colección, es posible que la consulta anterior no funcione, ya que estará realizando $desenrollar en cada documento y no podrá utilizar índices. Como lo sugirieron otros, debe reconsiderar la estructura de su modelo de documento. Consulte Estructuras de árbol de modelos de datos . Optimice en función de la lógica de su aplicación y el caso de uso de consulta, y deje que siga el esquema de documento flexible.