2011-07-01 13 views
7

मैं इस समय MongoDB शोध कर रहा हूँ। यह मेरी समझ है कि अधिकारी सी # चालक क्रमबद्धता और POCOs की अक्रमांकन प्रदर्शन कर सकते हैं है। मुझे अभी तक जानकारी नहीं मिली है कि दो वस्तुओं के बीच एक संदर्भ क्रमबद्ध है। [मैं कुछ ऐसे बारे में बात कर रहा हूं जो एम्बेड किए गए दस्तावेज़ों के बजाय आईडी लिंक के साथ दो अलग-अलग दस्तावेज़ों के रूप में प्रदर्शित किए जाएंगे।मोंगोडीबी सी # चालक - पीओसीओ संदर्भों का क्रमबद्धता?

क्रमबद्धता तंत्र स्थिति के इस प्रकार संभाल कर सकते हैं? (1):

class Thing { 
    Guid Id {get; set;} 
    string Name {get; set;} 
    Thing RelatedThing {get; set;} 
} 

या हम कुछ OOP बलिदान करने के लिए है, और कुछ इस तरह करते हैं? (2):

class Thing { 
    Guid Id {get; set;} 
    string Name {get; set;} 
    Guid RelatedThing_ID {get; set;} 
} 

अद्यतन:

बस एक तो संबंधित प्रश्नों की जोड़ी ...

एक) यदि serializer स्थिति को संभालने में सक्षम है (1)। एम्बेडिंग का उपयोग किये बिना इसे कैसे करें इसका एक उदाहरण क्या है?

ख) यदि एम्बेडिंग का उपयोग कर, यह सब 'हालात' भर में क्वेरी करने के लिए है कि क्या वे थे 'माता-पिता की या एम्बेडेड तत्वों की परवाह किए बिना संभव हो सकता है? ऐसी क्वेरी कैसी दिखती है?

उत्तर

11

सी # चालक उस वर्ग को क्रमबद्ध करने में संभाल सकता है जिसमें स्वयं के दूसरे उदाहरण (1) के संदर्भ शामिल हैं। हालांकि:

  1. आप अनुमान लगाया है, यह प्रतिनिधित्व करने के लिए embedding उपयोग करेगा इस
  2. वहाँ वस्तु ग्राफ में कोई परिपत्र पथ या एक ढेर अतिप्रवाह हो जाएगा

आप इसे संग्रहीत करना चाहते हैं होना चाहिए अलग-अलग दस्तावेज़ों के रूप में आपको अपनी दूसरी कक्षा (2) का उपयोग करना होगा और एकाधिक प्रविष्टियां करना होगा।

ऑब्जेक्ट को नेस्टेड एम्बेडिंग के साथ एक बड़े दस्तावेज़ के रूप में संग्रहीत किया जाता है जब कई स्तरों पर क्वेरी करना वास्तव में संभव नहीं है। आप की तरह कुछ विकल्प को देखने के लिए चाहते हो सकता है:

http://www.mongodb.org/display/DOCS/Trees+in+MongoDB

0

हाँ, यही कारण है कि पूरी तरह से संभव है।

मोंगोडीबी और अधिकांश नोएसक्यूएल समाधानों के बारे में आपको एक बात समझनी चाहिए कि वस्तुओं को अन्य वस्तुओं के भीतर निहित किया जा सकता है। MongoDB के मामले में, यह मूल रूप से है, यदि आप JSON में वस्तु बना सकते हैं, तो आप MongoDB में वस्तु बना सकते हैं।

सामान्य तौर पर, आप एक "अपेक्षाकृत" denormalized डेटाबेस संरचना के लिए प्रयास करना चाहिए। जब तक आप इसे अद्यतन नहीं कर रहे हैं तब तक डुप्लीकेट डेटा का थोड़ा सा ठीक है।

+0

धन्यवाद - मैंने प्रश्न को थोड़ा बढ़ा दिया है: ओ – UpTheCreek

0

तुम सच में किसी अन्य दस्तावेज़ के लिए एक संदर्भ चाहते हैं, आप एक DBRef उपयोग कर सकते हैं। हालांकि मोंगोडीबी में संदर्भों के साथ सीमा है।

  • आप केवल एक रेफरी
  • जब आप अपने बात के दस्तावेज मिल पर आईडी द्वारा क्वेरी, आप के रूप में शामिल MongoDB में नहीं मौजूद है करता जुड़े RelatingThing के दस्तावेज़ प्राप्त करने के लिए एक दूसरे क्वेरी बनाने के लिए होगा सकते हैं।
0

मुझे हाल ही में एक ही समस्या का सामना करना पड़ा है, और मैं आमतौर पर उनसे दूर चला जाता हूं लेकिन ... मुझे लगता है कि यह आईडी फ़ील्ड पर तैनात एक महत्वपूर्ण संख्या प्रणाली के लिए एक अच्छा उपयोग हो सकता है।

class Thing { 
string Id {get; set;} 
string Name {get; set;} 
string RelatedThing {get; set;}} 

तो, सरल बनाने, अगर ईद "T00001" (या वास्तव में टी + GUID) की तरह कुछ था, आप आसानी से मोंगो से बातें की सेट आईडी की तरह कुछ के लिए क्वेरी से मिल सकता है टी के साथ शुरू होता है, और उन सभी के लिए ऑब्जेक्ट्स सेट अप करता है (या सिर्फ आपके द्वारा पता जाने वाले सबसेट के लिए आपका संदर्भ होता है, यदि यह एक बहुत बड़ा सेट है)।

तुम्हें पता है/कि RelatedThing एक बात हो सकता है, लेकिन यह सिर्फ एक स्ट्रिंग होगा जब यह मोंगो से वापस आता है उम्मीद है। लेकिन अगर आपने उपर्युक्त वस्तुओं को सेट अप किया है, तो आप स्ट्रिंग का प्रभावी ढंग से उपयोग कर सकते हैं जैसे कि यह एक ऑब्जेक्ट संदर्भ था (आखिरकार, यह वास्तव में है, "मैन्युअल रूप से" किया गया है)।

यह करने का एक 'ढीला' तरीका है, लेकिन यह आपके लिए व्यावहारिक हो सकता है।

क्या कोई भी उस दृष्टिकोण के साथ किसी भी समस्या को देख सकता है?

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