2011-03-05 11 views
5

मैं इस बारे में उत्सुक था कि Grails के लिए MongoDB प्लगइन संबंधों को कैसे संभालेगा।मोंगोडीबी, Grails, और रिश्ते

Author रों दो क्षेत्रों है:: इस परीक्षण करने के लिए मैं दो डोमेन वर्गों के साथ एक बहुत ही सरल आवेदन किया MongoDB स्थापित करने के बाद String title और Author author

: String firstName और String lastName

Book रों दो क्षेत्रों है और Grails मैंने कुछ Author एस और Book एस बनाया और मोंगोडीबी इंटरैक्टिव खोल का उपयोग करके एक झलक लिया। मुझे जो मिला वह यह है कि संबंधों को उसी तरह से संभाला जा रहा था जैसे वे एक संबंधपरक डेटाबेस में संभाले जाएंगे: अन्य ऑब्जेक्ट्स आईडी फ़ील्ड के संदर्भ।

तो अब प्रश्नों के लिए:

  1. आदेश GORM इस पुल के लिए, यह एक अलग कनेक्शन प्रत्येक दस्तावेज़ को पुनः प्राप्त करने की जरूरत है में?
  2. यदि हां, तो क्या यह PostgreSQL या MySQL जैसे संबंधपरक डेटाबेस में बेहतर नहीं होगा?
  3. यदि उपरोक्त दो प्रश्नों का उत्तर वास्तव में 'हां' है, तो क्या मोंगोडीबी जैसे दस्तावेज़ डेटाबेस में संबंधों का प्रबंधन करने का एक बेहतर तरीका है? मुझे एहसास है कि मोंगोडीबी को रिलेशनल नहीं माना जाना चाहिए, लेकिन कुछ चीजें हैं जो मुझे नहीं दिखाई देती हैं कि डेटा को डुप्लिकेट किए बिना रिश्ते कैसे प्राप्त करें (जिससे अद्यतन दुःस्वप्न)।

संपादित करें: मैं भी सिर्फ देखा है कि grails मेरी लेखकों की 'id' संपत्ति पर ठीक से छँटाई नहीं है। क्या इसे मोंगोडीबी का उपयोग करने के साथ करना है? खोल में मैं देख सकता हूं कि Grails द्वारा किए गए सभी दस्तावेजों की _id संपत्ति डेटाटाइप NumberLong है।

उत्तर

3

मुझे पता MongoDB रिलेशनल होना चाहिए नहीं है, लेकिन वहाँ कुछ चीजें हैं जो मैं डेटा

तो यह पसीना नहीं आता डुप्लिकेट के बिना रिश्तों के चारों ओर पाने के लिए नहीं दिख रहा है। MongoDB विरोधी संबंध नहीं है, यह दस्तावेज़ उन्मुख है।

इस मामले में, पुस्तकें और लेखक दो शीर्ष-स्तरीय वस्तुएं हैं। उनमें से किसी को घोंसला करना उचित नहीं है, वे दोनों ही मूल संस्थाएं हैं।

प्रत्येक पुस्तक के मामले में केवल एक लेखक (एन: 1) होने पर, पुस्तक के लिए "संदर्भ" लेखक होने के लिए यह पूरी तरह से उचित है। निश्चित रूप से आपको दो प्रश्न करना होगा। लेकिन क्या यह एक प्रश्न पूछने से बहुत अलग है? जुड़ने वाली क्वेरी को अभी भी दो इंडेक्स लुकअप और दो डेटा लुकअप करना है। तो आप वास्तव में यहां कुछ भी खर्च नहीं कर रहे हैं।

एकाधिक लेखकों (एम: एन) का समर्थन करने वाली प्रत्येक पुस्तक के मामले में, आपके पास several options आपकी आवश्यकताओं के आधार पर है।

मैं, "रिलेशनल नहीं" के रूप में MongoDB के बारे में सोचना पसंद नहीं है मुझे लगता है कि यह क्लीनर के रूप में MongoDB के बारे में सोचना क्वेरी अनुकूलित

मैंने यह भी देखा कि grails मेरे लेखकों की 'आईडी' संपत्ति पर ठीक तरह से सॉर्ट नहीं कर रहा है ...

मैं सीधे Grails लेखक के साथ जांच करूँगा। लगता है जैसे वे वास्तविक ऑब्जेक्ट आईडी (या मोंगोइड्स) के बजाय "तार" संग्रहित कर सकते हैं। हालांकि महत्वपूर्ण नहीं है यह एक बग हो सकता है।

1

आईडी संपत्ति के संबंध में, दस्तावेज़ अब दिखाता है कि आप अपने डोमेन क्लास में ObjectId id या String id की घोषणा कर सकते हैं ताकि एक लंबे समय तक उपयोग करने के लिए डिफ़ॉल्ट GORM कार्यान्वयन का उपयोग न किया जा सके। बस अपनी कक्षा में फ़ील्ड घोषित करें, और प्लगइन बाकी की देखभाल करेगा।