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

Como consultar a estrutura da árvore recursivamente com o MongoDB?


Dependendo do seu caso de uso, MongoDB v3.4 fornece um pipeline de agregação operador chamado $graphLookup . O operador de agregação é capaz de realizar uma pesquisa recursiva em uma coleção. Veja mais definições em definição de $graphLookup .

Usando sua hierarquia de documentos e valores acima como exemplos, você pode tentar executar a agregação abaixo:
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"}
                  }}
]);

O acima deve retornar o resultado como abaixo:
{ "_id" : 7, "parents" : [ [ 1, 2, 4 ] ] }

Dito isto, se você tiver uma grande coleção, a consulta acima pode não funcionar, pois você estará executando $unwind em cada documento e não poderá utilizar índices. Conforme sugerido por outros, você deve reconsiderar sua estrutura de modelo de documento. Consulte Estruturas de árvore de modelos de dados . Otimize com base na lógica do aplicativo e no caso de uso de consulta e deixe o esquema de documento flexível seguir.