sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $graphLookup få barn på alla nivåer djupt - kapslat resultat

Tyvärr kan du inte få hela djupet i ett kapslat format. Att använda en vy är en lösning som låter dig utföra den operationen, men du skulle behöva skapa en ny vy för varje nivå av inbäddning som du behöver. Istället skulle jag överväga att utföra en graphLookup utan att ge ett djup, med början från rotnivån, hämtar hela hierarkin i en enda fråga innan trädet beräknas på programnivå.

Det här skulle se ut ungefär så här:

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

Detta bör låta dig hämta hela hierarkin på en gång, så härnäst måste du beräkna trädet i din applikation, från informationen du kommer att ha i "barn"-arrayen.



  1. Hur man optimerar prestanda för ClusterControl och dess komponenter

  2. Hur fungerar exemplet med meddelanderäkning i Meteor docs?

  3. MongoDB $eller Aggregation Pipeline Operator

  4. Det går inte att skapa ett fungerande meteor.js-projekt på en lösdrivarlåda