यह कमोबेश सवाल है कि अपने संग्रहों को कैसे डिजाइन किया जाए। चूंकि मोंगो को प्रकारों के बारे में कुछ भी नहीं पता है, इसलिए हमें दस्तावेजों को एक दूसरे से अलग करने में सक्षम होने के लिए अतिरिक्त मेटाडेटा जोड़ना होगा। इस प्रकार पूछताछ करते समय आपको इन बाधाओं को क्वेरी में भी जोड़ना होगा। ध्यान दें कि आप _class
. का संदर्भ ले सकते हैं DefaultMongoTypeMapper.DEFAULT_TYPE_KEY
. के माध्यम से कुंजी ।
हमने क्वेरी में कुछ एपीआई जोड़ने के बारे में सोचा ताकि कोई केवल इस तरह के किसी दिए गए प्रकार के दस्तावेज़ प्राप्त करना चाहता है:
mongo.find(new Query(Teacher.class), Teacher.class);
यह अभी भी थोड़ा अजीब लगता है कि आपको डोमेन क्लास को दो बार बताना होगा (जो समझ में आता है कि आप किसी दिए गए प्रकार के दस्तावेज़ों के परिणामों को प्रतिबंधित करना चाहते हैं लेकिन उन्हें एक अलग वर्ग पर मैप करना चाहते हैं)। इसके अलावा हम परिणामों को केवल उन दस्तावेज़ों तक सीमित कर सकते हैं जिनमें बिल्कुल वही . है टाइप करें क्योंकि प्रकार स्ट्रिंग्स के रूप में संग्रहीत होते हैं और विरासत केवल तभी लागू की जा सकती है जब कक्षा पहले ही लोड हो चुकी हो। इसलिए Person
. प्रकार वाले दस्तावेज़ों के लिए क्वेरी करते समय हमें सभी लोड करना होगा दस्तावेज़ पहले, प्रकार को देखने का प्रयास करें, प्रकार की जाँच करें और संभावित रूप से उस परिणाम को फेंक दें जो प्रदर्शन कारणों से उप-इष्टतम है।
एक अन्य विकल्प उन सभी प्रकारों को संग्रहीत करना होगा जिन्हें एक वर्ग असाइन करने योग्य है (Object
को छोड़कर सभी इंटरफेस और सुपरक्लास हो सकता है) लेकिन इससे काफी मात्रा में डेटा संग्रहीत हो जाएगा। इसके बदले में @Document
. में एक ध्वज जोड़कर संपर्क किया जा सकता है एनोटेशन।
निचला रेखा:वर्तमान में, कोई दूसरा रास्ता नहीं है, लेकिन अगर आपके पास सुझाव हैं कि इसे कैसे बेहतर बनाया जा सकता है, तो बेझिझक JIRA टिकट बढ़ाएँ।