2011-12-17 11 views
6

मुझे एक रिकर्सिव पेड़ संरचना को स्टोर करने की आवश्यकता है। एक लिंक्ड सूची।
तो सभी ऑब्जेक्ट समान हैं। प्रत्येक के पास एक मूल वस्तु के लिए एक सूचक होता है और प्रत्येक में बाल वस्तुओं की एक श्रृंखला होती है।
क्या मैं मोंगो में ऐसी संरचना संग्रहीत कर सकता हूं।
यानी माता-पिता की वस्तुओं का एक मोंगो संग्रह, प्रत्येक वस्तु में इसके भीतर बच्चों के वस्तुओं का एक मोंगो संग्रह होता है।क्या एक मोंगोडीबी संग्रह में इसके अंदर एक और संग्रह हो सकता है?

$a = $MyCollection->findOne(**some conditions)->Childs->find(...) 

उत्तर

3

आप संग्रह में संग्रह संग्रह नहीं कर सकते हैं। लेकिन आप उन संग्रहों को स्टोर कर सकते हैं जो ऑब्जेक्ट्स को अन्य संग्रहों में संदर्भित करते हैं। आपको आईडी या दस्तावेज़ में तत्व को हल करना होगा और फिर यदि वह तत्व अधिक आईडी स्टोर करता है तो आपको उन पर और बाद में हल करने की आवश्यकता होगी। दस्तावेज़ अमीर हो सकता है और डेटा नकल के लिए होती हैं लेकिन डॉक्स में वे व्याख्या कैसे करते हैं कि बजाय आप सिर्फ आईडी

5

MongoDB स्टोर कर सकते हैं सहायक दस्तावेज़ों का उपयोग कर सकते एम्बेड करने का यह:

Node 
{ 
    "value" : "root" 
    "children" : [ { "value" : "child1", "children" : [ ... ] }, 
        { "value" : "child2", "children" : [ ... ] } ] 
} 

हालांकि, मैं का उपयोग करने की सलाह नहीं देते वृक्ष संरचनाओं या कुछ भी जटिल के लिए उप-दस्तावेज। उप-दस्तावेज प्रथम स्तर के नागरिक नहीं हैं; वे संग्रह आइटम नहीं हैं।

उदाहरण के लिए, मान लें कि आप किसी दिए गए मान के साथ नोड्स को तुरंत ढूंढने में सक्षम होना चाहते हैं। value पर एक इंडेक्स के माध्यम से, वह लुकअप तेज़ होगा। हालांकि, यदि मान उप-दस्तावेज़ में है, तो इसे अनुक्रमित नहीं किया जाएगा क्योंकि यह संग्रह तत्व का मान नहीं है।

Node 
{ 
    "_id" : ObjectId("..."), 
    "parentId" : ObjectId("..."), // or null, for root 
} 

आप संबंधित तत्व की आईडी लाने के लिए मैन्युअल रूप से क्रमबद्धता से कुछ करना होगा:

इसलिए, यह आमतौर पर मैन्युअल रूप से क्रमांकन करते हैं और बजाय आईडी की एक सूची संग्रहीत करने के लिए बेहतर है।

संकेत मान लीजिए कि आप पेड़ की एक पूरी शाखा लेना चाहते हैं। इसके बजाय केवल प्रत्यक्ष पैरेंट आईडी भंडारण की, आप स्टोर कर सकते हैं सभी पूर्वज बजाय आईडी:

"ancestorIds": [id1, id2, id3]

संबंधित मुद्दे