MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडब $ग्राफलुकअप पदानुक्रम का निर्माण

नीचे दिया गया समाधान कमोबेश मेरे पिछले उत्तरों में से एक जैसा ही है ताकि आप पूरी तरह से स्पष्टीकरण प्राप्त कर सकें यहां ए>

db.projects.aggregate([
    {
        $graphLookup: {
            from: "projects",
            startWith: "$_id",
            connectFromField: "_id",
            connectToField: "parent",
            as: "children",
            maxDepth: 4,
            depthField: "level"
        }
    },
    {
        $unwind: "$children"
    },
    {
        $sort: { "children.level": -1 }
    },
    {
        $group: {
            _id: "$_id",
            children: { $push: "$children" }
        }
    },
    {
        $addFields: {
            children: {
                $reduce: {
                    input: "$children",
                    initialValue: {
                        currentLevel: -1,
                        currentLevelProjects: [],
                        previousLevelProjects: []
                    },
                    in: {
                        $let: {
                            vars: {
                                prev: { 
                                    $cond: [ 
                                        { $eq: [ "$$value.currentLevel", "$$this.level" ] }, 
                                        "$$value.previousLevelProjects", 
                                        "$$value.currentLevelProjects" 
                                    ] 
                                },
                                current: { 
                                    $cond: [ 
                                        { $eq: [ "$$value.currentLevel", "$$this.level" ] }, 
                                        "$$value.currentLevelProjects", 
                                        [] 
                                    ] 
                                }
                            },
                            in: {
                                currentLevel: "$$this.level",
                                previousLevelProjects: "$$prev",
                                currentLevelProjects: {
                                    $concatArrays: [
                                        "$$current", 
                                        [
                                            { $mergeObjects: [ 
                                                "$$this", 
                                                { children: { $filter: { input: "$$prev", as: "e", cond: { $eq: [ "$$e.parent", "$$this._id"  ] } } } } 
                                            ] }
                                        ]
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    {
        $addFields: { children: "$children.currentLevelProjects" }
    },
    {
        $match: {
            _id: "1"
        }
    }
])

अंतिम चरण को फ़िल्टरिंग माना जाता है ताकि आप यहां किसी भी स्तर की गहराई के लिए डेटा प्राप्त कर सकें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. V4 से पहले MongoDB के ACID के अनुरूप नहीं होने का वास्तव में क्या मतलब था?

  2. स्प्रिंग डेटा के साथ विशिष्ट आइटम देखते समय केवल कुछ फ़ील्ड का पर्दाफाश करें?

  3. MongoDB एक उप-दस्तावेज़ दस्तावेज़ को एक उप-दस्तावेज़ से हटा दें

  4. उल्का डॉक्स में संदेश-गणना उदाहरण कैसे काम करता है?

  5. मोंगोडीबी $पुश