2012-10-15 12 views
6

के माध्यम से वृक्ष संरचना को कार्यान्वित करने के लिए कैसे मैं मोंगोस 3.x का उपयोग करके एक वृक्ष संरचना (इस तरह मोंगो दस्तावेज़ों में इसी तरह) लागू करने पर काम कर रहा हूं, लेकिन मुझे encapsulate करने का सबसे अच्छा तरीका अनिश्चित है आम तौर पर अपने भाई बहनों और पूर्वजों के साथ एक विशिष्ट नोड लोड करने के लिए सभी तर्क, और विशेष रूप से जनसंख्या कार्यक्षमता के साथ सबसे अच्छा काम कैसे करें, जहां रेफरी के समान संग्रह में रेफरी है।Mongoose.js: जनसंख्या

कुछ संदर्भ के लिए, जिस पेड़ के साथ मैं काम कर रहा हूं वह वह है जिसमें नोड्स संपादित नहीं किए जाते हैं, लेकिन नए बच्चों को किसी भी समय किसी भी नोड में जोड़ा जा सकता है। अब तक मुझे यह मॉडलिंग विधियों के एक सेट के साथ ठीक काम मिल गया है जो शुरुआती खोज के बाद वस्तुओं को लोड करता है, लेकिन ऐसा लगता है कि एक ही शाखा को आसानी से लोड करने का एक बेहतर तरीका होना चाहिए जिसमें सभी माता-पिता और भाई डेटा को एक सिंगल के साथ चाहिए नियंत्रक में आदेश, और मॉडल पर कुछ सुविधाजनक खोज विधि में सभी प्रासंगिक आबादी encapsulate।

// Sub-document to store parent ref along with it's value (a form of caching) 
var Parent = new Schema({ 
    id: ObjectId 
    , text: String 
}); 

// Main tree-node element schema 
var Branch = new Schema({ 
    text: { 
     type: String 
     , required: true } 
    , date: {type: Date, default: Date.now } 
    , trail: [Parent] 
    , parentBranchId: ObjectId 
    , parentBranch: { type: Schema.Types.ObjectId, ref: 'Branch' } 
    , _children: [{type: Schema.Types.ObjectId, ref: 'Branch'}] 
    // These two have been commented out because I have no clue how to best implement 
    // , _priorSiblings: { type: Schema.Types.ObjectId, ref: 'Branch' } 
    // , _followingSiblings: { type: Schema.Types.ObjectId, ref: 'Branch' } 
}); 

मेरे आशा तो एक लोड करने के लिए सक्षम होने के लिए होगा:

बुनियादी स्कीमा मैं के साथ काम करने की कोशिश कर रहा हूँ, तो, (: https://gist.github.com/3889616 यहां भी उपलब्ध है) कुछ इस तरह हो सकता है शाखा w/निम्नलिखित कोड की तरह कुछ के माध्यम से प्रासंगिक संबंधित डेटा, हालांकि इस बिंदु पर मैं बहुत ज्यादा खो रहा हूँ और एक अच्छा सौदा बंद आधार हो सकता है: अंत में

req.app.models.Branch 
    .findById(req.param("id")) 
    .populate("parentBranch") 
    .populate("parentBranch._children") 
    .exec(...) 

, मैं कुछ है अच्छा लगेगा मैं abstrac सकता है मोंगोस के लिए "पेड़" प्लगइन में टी, लेकिन मुझे लगता है कि मुझे पहले इस आर्किटेक्ट को सही तरीके से प्राप्त करना होगा। कोई विचार?

एफडब्ल्यूआईडब्लू, दिन के अंत में, मुझे वास्तव में प्रत्येक शाखा के लिए आवश्यक डेटा माता-पिता, अगले भाई, पिछले भाई (निर्माण समय के मामले में दोनों) और माता-पिता के सभी बच्चे हैं।

अग्रिम धन्यवाद!

उत्तर

1

मुझे पता है कि यह प्रश्न पुराना है, लेकिन क्या आपने मोंगोज़-पेड़ मॉड्यूल में देखा है? https://github.com/franck34/mongoose-tree

ऑब्जेक्ट्स आईएमओ के बीच संबंधों को संभालने के लिए यह एक बहुत अच्छा एपीआई है।

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