51

में कई रिश्तों को व्यवस्थित करने के लिए मेरे पास दो टेबल/संग्रह हैं; उपयोगकर्ता और समूह। उपयोगकर्ता किसी भी समूह के सदस्य हो सकता है और उपयोगकर्ता किसी भी समूह के मालिक भी हो सकता है। एक रिलेशनल डेटाबेस में मेरे पास शायद उपयोगकर्ता समूह नामक उपयोगकर्ता समूह, एक समूह आईडी कॉलम और एक IsOwner कॉलम के साथ एक तीसरी तालिका होगी।MongoDB

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

या क्या ब्रिजिंग उपयोगकर्ता समूह समूह कई डेटाबेसों के लिए दस्तावेज़ डेटाबेस में एक वैध अवधारणा है?

धन्यवाद

+0

[इस प्रश्न] के उत्तर भी देखें (http://stackoverflow.com/questions/2336700/mongodb-many-to-many-association) और [यह प्रश्न] (http://stackoverflow.com/questions/ 54 9 86 9 2/कई-से-रिश्ते-इन-कॉचडब-या-मोंगोडब) –

+0

मुझे पता है कि यह पुराना है लेकिन मैं स्केल के बारे में भी सोच रहा हूं।क्या होगा यदि आपके पास 1000 समूह हैं? – FarscapePROJ

+0

ग्रेट प्वाइंट - इस मामले में, एक और विकल्प, SQL डेटाबेस से जंक्शन संबंध के बराबर उपयोग करना है- दो विदेशी कुंजी के साथ एक मध्यवर्ती संग्रह- प्रत्येक संबंधित संग्रह के लिए एक। इस मामले में, आप 3 प्रश्न निष्पादित कर सकते हैं: (1) अभिभावक परिणाम प्राप्त करने के लिए एक सामान्य खोज(), (2) इंटरमीडिएट परिणाम प्राप्त करने के लिए एक आईएन क्वेरी, और अंत में (3) विदेशी कुंजी का उपयोग कर एक आईएन क्वेरी बाल अभिलेख खोजने के लिए मध्यवर्ती परिणाम। (इस प्रकार हम वाटरलाइन में इस सुविधा को कार्यान्वित करते हैं) – mikermcneil

उत्तर

34

मैंने क्या किया देखा है, और क्या मैं इस समय का उपयोग प्रत्येक दस्तावेज़ में नोड आईडी के साथ सरणियों एम्बेडेड रहे हैं।

तो दस्तावेज़ user1 संपत्ति समूह हैं: [ID1 आईडी 2]

और दस्तावेज़ GROUP1 संपत्ति उपयोगकर्ताओं है: [USER1]। दस्तावेज़ समूह 2 में संपत्ति उपयोगकर्ता भी हैं: [user1]।

इस तरह आप समूह ऑब्जेक्ट प्राप्त करते हैं और आसानी से सभी संबंधित उपयोगकर्ताओं का चयन करते हैं, और उपयोगकर्ता के लिए भी यही।

ऑब्जेक्ट बनाने और अपडेट करते समय यह थोड़ा और काम करता है। जब आप कहते हैं कि 2 ऑब्जेक्ट्स संबंधित हैं, तो आपको दोनों ऑब्जेक्ट्स को अपडेट करना होगा।

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

http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef

+0

मुझे दस्तावेज़ों को इंगित करने के लिए भी बहुत धन्यवाद। अब समझ में आता है, यह एक अलग दृष्टिकोण है और अधिक लचीला और प्रदर्शन करने वाला यह इस सामग्री में शामिल होना रोमांचक है। इसके अलावा http://www.mongodb.org/display/DOCS/Schema+Design –

+7

बस देखा कि केली बैंकर इस प्रस्तुति वीडियो में 2 9 मिनट में मेरे प्रश्न का उत्तर दें: http://www.blip.tv/file/3704083। कई से अधिक लोगों का प्रतिनिधित्व करने के लिए कभी भी जॉइन टेबल का उपयोग न करें, इसके बजाय दोनों संग्रहों में ऑब्जेक्ट आईडी की एक सूची है –

+8

हालांकि यह स्केल कैसा है? समूह दस्तावेज़ में उपयोगकर्ताओं की एक सूची होने पर आपके पास संभावित रूप से हजारों उपयोगकर्ता सही होने पर नियंत्रण से बाहर हो सकते हैं? – PJH

2

के एक उदाहरण के साथ

  • पुस्तकों लेखकों के लिए शिक्षकों को
  • छात्रों कई संबंध के लिए कई समझ में

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

लेकिन जब आपके पास कई संबंधों के लिए हैं, तो दो संग्रहों का उपयोग करें और एक वास्तविक लिंकिंग करें।

1

किसी भी मामले में दिलचस्पी रखने के मामले में, मैं बस mongoDB ब्लॉग में पोस्ट किए गए एक बहुत अच्छे लेख में घुस गया। 6 Rules of Thumb for MongoDB Schema Design। इस लेख में 3 भाग हैं, सभी 3 पढ़ने के बाद आपको अच्छी समझ होगी।

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

  • कोई संबंधित समस्या नहीं^_^