MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $graphLookup holt Kinder alle Ebenen tief - verschachteltes Ergebnis

Leider können Sie in einem verschachtelten Format nicht die volle Tiefe abrufen. Die Verwendung einer Ansicht ist eine Problemumgehung, mit der Sie diesen Vorgang ausführen können, aber Sie müssten für jede benötigte Einbettungsebene eine neue Ansicht erstellen. Stattdessen würde ich in Erwägung ziehen, eine graphLookup durchzuführen, ohne eine Tiefe bereitzustellen, beginnend mit der Stammebene. Abrufen der gesamten Hierarchie in einer einzigen Abfrage, bevor der Baum auf Anwendungsebene berechnet wird.

Dies würde in etwa so aussehen:

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

Dadurch sollten Sie die gesamte Hierarchie auf einmal abrufen können, also müssen Sie als nächstes den Baum in Ihrer Anwendung aus den Informationen berechnen, die Sie im Array "Kinder" haben werden.