MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $graphLookup porta i bambini a tutti i livelli in profondità - risultato nidificato

Sfortunatamente, non puoi ottenere la profondità completa in un formato nidificato. L'uso di una vista è una soluzione alternativa che ti consente di eseguire quell'operazione, ma dovresti creare una nuova vista per ogni livello di incorporamento di cui hai bisogno. Invece, prenderei in considerazione l'esecuzione di un graphLookup senza fornire una profondità, a partire dal livello radice, recuperando tutta la gerarchia in una singola query, prima di calcolare l'albero a livello di applicazione.

Sembrerebbe qualcosa del genere:

db.node.aggregate([
    { $match: {
        parentId: null
    }},
    { $graphLookup: {
        from: "node",
        startWith: "$nodeId",
        connectFromField: "nodeId",
        connectToField: "parentId",
        depthField: "depth",
        as: "children"
    }}
]);

Questo dovrebbe permetterti di recuperare l'intera gerarchia in una volta sola, quindi devi calcolare l'albero nella tua applicazione, dalle informazioni che avrai nell'array "figli".