MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

Mongoid store_in यादृच्छिक परिणाम उत्पन्न करता है

मुझे थोड़ा समय लगा लेकिन मुझे जवाब मिल गया। मैंने इसे पोस्ट करने का फैसला किया, उम्मीद है कि यह दूसरों की मदद करेगा।

मोंगोइड कुछ ऐसा लागू करता है जिसे "सिंगल टेबल इनहेरिटेंस" कहा जाता है। जैसे ही आप एक अभिभावक वर्ग से एक बाल वर्ग प्राप्त करते हैं, बच्चे को "प्रकार" विशेषता जोड़कर मूल संग्रह में संग्रहीत किया जाएगा। "store_in" का उपयोग करना mongodb को स्पष्ट रूप से बताता है कि किस संग्रह में दस्तावेज़ों को संग्रहीत करना है। store_in को चाइल्ड क्लास में परिभाषित करने से दिए गए संग्रह में मोंगोइड स्टोर सब कुछ (पैरेंट सहित) हो जाता है। मुझे लगता है कि प्रत्येक बच्चे के लिए एक समर्पित store_in असाइनमेंट का उपयोग करना मोंगोइड को गड़बड़ कर देता है। हालांकि, इसका परिणाम यह होता है कि दस्तावेज़ दिए गए किसी भी संग्रह में बेतरतीब ढंग से संग्रहीत हो जाते हैं।

इसे रूबी में सामान्य कार्यक्षमता के लिए मिक्सिन के रूप में एक मॉड्यूल का उपयोग करके हल किया जा सकता है। यह यह दस्तावेज़

लेकिन मैंने आख़िरकार ऐसा न करने का निर्णय लिया! बेहतर प्रदर्शन पाने की उम्मीद में, मैं अपने संग्रह को छोटा रखने के लिए ऐसा क्यों चाहता था। कुछ (10gen) विशेषज्ञों से बात करने के बाद मुझे लगता है कि सभी बाल तत्वों के लिए सिंगल पैरेंट ऑब्जेक्ट संग्रह का उपयोग करना बेहतर तरीका है। मोंगोडब के प्रदर्शन पर कोई प्रभाव नहीं होना चाहिए लेकिन समाधान अधिक लचीला हो जाता है। वास्तव में यह mongodb में बिना योजना के डिज़ाइन का बेहतर उपयोग करता है।

तो कोड फिर से इस तरह दिखेगा:

class BaseClass
  include Mongoid::Document

  ... shared functionality

end

class ChildClass1 < BaseClass
  ...individual functionality...
end  

class ChildClass2 < BaseClass
  ...individual functionality...
end



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में लंबे समय से चल रहे संचालन का प्रबंधन

  2. MongoDB क्वेरी में इस बाएँ () SQL का निर्माण करें?

  3. PyMongo में MapReduce

  4. मोंगोडब एक्सेसिंग सबडॉक्यूमेंट्स

  5. क्या db.stats() MongoDB के लिए एक ब्लॉकिंग कॉल है?