2017-02-09 21 views
6

मेरे पास एक ऐसा एप्लिकेशन है जहां आलेख एकाधिक प्लेटफ़ॉर्म से जोड़ा जा सकता है।संपादन उपखंड एन-एन संबंध mongodb

आलेख में प्लेटफ़ॉर्म और प्लेटफ़ॉर्म की एक सूची में लेखों की एक सूची भी शामिल है।

अधिक विस्तृत जानकारी के लिए कृपया कुछ महीने पहले मुझसे पूछे गए इस स्टैक ओवरफ्लो प्रश्न को देखें।

https://stackoverflow.com/a/40377383/5770147

सवाल यह है कि एक लेख बना सकते हैं और लेख और मंच के बीच एन एन संबंध को लागू करने पर था।

मेरे पास आलेख बनाना और लेख सेटअप को हटाना है ताकि सूचियां प्लेटफ़ॉर्म में भी अपडेट हो जाएं।

मैं एक लेख संपादित करने को कैसे कार्यान्वित कर सकता हूं ताकि मैं अपडेट कर सकूं कि कौन से प्लेटफॉर्म किसी आलेख से जुड़े हुए हैं?

लिंक किए गए प्लेटफ़ॉर्म बनाने और संपादित करने के लिए मैं एक ड्रॉपडाउन मेनू का उपयोग करता हूं जिसमें एकाधिक विकल्प चुने जा सकते हैं। आवश्यक कोड पहले से जुड़े प्रश्न में पाया जा सकता है।

+0

@chridam पिछले समाधान के रूप में देख रहा है, क्या आपके पास इस –

उत्तर

5

जानकारी है कि आपके द्वारा दी गई, मैं दो संभव दृष्टिकोण की सिफारिश करेंगे, उसी नींव से शुरू के आधार पर:

उपयोग दो संग्रह (लेख और प्लेटफार्मों) और एक सरणी में मंच दस्तावेजों के लिए केवल एक संदर्भ की दुकान

  • आप हवलदार: अगर दस्तावेजों

लेख पर परिभाषित मैं इस दृष्टिकोण की सिफारिश करेंगे दोनों लेख दस्तावेजों, साथ ही प्लेटफार्मों

  • आप स्वतंत्र रूप से दोनों संस्थाओं का प्रबंधन करने में सक्षम होना चाहते की ईए उच्च प्रमुखता, भी उन दोनों के बीच संदर्भ

    // articles collection schema 
    { 
    "_id": ..., 
    "title": "I am an article", 
    
    ... 
    
    "platforms": [ "platform_1", "platform_2", "platform_3" ], 
    ... 
    } 
    
    
    // platforms collection schema  
    { 
    "_id": "platform_1", 
    "name": "Platform 1", 
    "url": "http://right/here", 
    ... 
    }, 
    
    { 
    "_id": "platform_2", 
    "name": "Platform 2", 
    "url": "http://right/here", 
    ... 
    }, 
    
    { 
    "_id": "platform_3", 
    "name": "Platform 3", 
    "url": "http://right/here", 
    ... 
    } 
    
  • इस दृष्टिकोण है यहां तक ​​कि अगर समकालन करते हुए काफी लचीला, यह एक लागत पर आता है - यदि आपको लेख और प्लेटफार्म डेटा दोनों की आवश्यकता है, तो आपको अपने मोंगोडीबी उदाहरण के लिए और अधिक प्रश्न पूछना होगा, क्योंकि डेटा दो अलग-अलग संग्रहों में विभाजित है।

    उदाहरण के लिए, जब एक लेख पेज लोड हो रहा है, यह देखते हुए कि आप भी platforms की एक सूची प्रदर्शित करना चाहते हैं, तो आप articles collection के लिए एक क्वेरी आग करने के लिए होता है, और फिर भी platforms collection पर एक खोज सभी मंच को पुनः प्राप्त करने को गति प्रदान ऐसी संस्थाएं जिनके लेख article document पर platform एस सरणी के सदस्यों के माध्यम से प्रकाशित किए गए हैं।

    हालांकि, अगर आप केवल एक छोटे सबसेट है अक्सर पहुँचा platform attributes है कि आप जब एक article document लोड हो रहा है, तो आप मंच के लिए _id संदर्भ के अलावा उन विशेषताओं स्टोर करने के लिए articles collection पर platforms सरणी वृद्धि कर सकते हैं उपलब्ध है की जरूरत दस्तावेज:

    // enhanced articles collection schema 
    { 
    "_id": ..., 
    "title": "I am an article", 
    
    ... 
    
    "platforms": [ 
        {platform_id: "platform_1", name: "Platform 1"}, 
        {platform_id: "platform_2", name: "Platform 2"}, 
        {platform_id: "platform_3", name: "Platform 3"} 
    ], 
    
    ... 
    

    }

    अगर platform data attributes कि आप अक्सर पुनः प्राप्त लेख विशिष्ट डेटा के साथ एक साथ प्रदर्शित करने के लिए वें नहीं बदल रहे हैं इस संकर दृष्टिकोण उपयुक्त होगा अक्सर

    अन्यथा, आप सभी अद्यतन कि गुण है कि आप लेख दस्तावेज़ों के लिए प्लेटफार्मों सरणी के भाग के रूप में ट्रैक के सबसेट के साथ platforms collection में platform document attributes लिए किए जाते हैं सिंक्रनाइज़ करने के लिए होगा।

    व्यक्ति प्लेटफार्मों के लिए लेख सूचियों के प्रबंधन के बारे में, मैं दोनों संग्रहों में एन-टू-एन संदर्भ स्टोर करने की अनुशंसा नहीं होगा, के रूप में ऊपर उल्लिखित तंत्र पहले से ही आप articles collection क्वेरी करने के साथ एक खोज क्वेरी का उपयोग करके लेख सूचियों को निकालने के लिए अनुमति देता है platform document की _id मूल्य:

    Approach #1 
    db.articles.find({"platforms": "platform_1"}); 
    
    Approach #2: 
    db.articles.find({"platforms.platform_id": "platform_1"}); 
    

    दो अलग दृष्टिकोण प्रस्तुत करने के बाद, आप क्वेरी पैटर्न और अपने आवेदन के प्रदर्शन थ्रेसहोल्ड का विश्लेषण करने और बनाने के लिए के लिए एक गणना परिदृश्यों के आधार पर निर्णय क्या मैं अब की सिफारिश करेंगे है कि आप मुठभेड़।

    +0

    को कार्यान्वित करने के बारे में कोई विचार है, इसलिए मैं प्लेटफॉर्म स्कीमा से आलेख सूची को हटा सकता हूं और फिर प्लेटफॉर्म के भीतर आलेखों की तलाश करते समय दूसरे दृष्टिकोण का उपयोग करता हूं –

    +0

    का उपयोग किया गया - भले ही आप प्रत्येक प्लेटफ़ॉर्म के लिए आलेख संदर्भों की एक सूची संग्रहीत कर रहे हों, फिर भी आपको प्लेटफ़ॉर्म दस्तावेज़ों के संदर्भों का उपयोग करके उन लेखों के विवरण निकालने के लिए आलेख संग्रह पर एक प्रश्न करना होगा, क्योंकि खोज अनुमान –

    +0

    बहुत बहुत धन्यवाद मैं इसे तुरंत कोशिश करूँगा –