इसका उत्तर वास्तव में इस बात पर निर्भर करता है कि आप मोंगोडब में संग्रहीत डेटा के साथ क्या करना चाहते हैं। यह याद रखना महत्वपूर्ण है कि एक ReferenceField
mongodb में किसी अन्य संग्रह में एक दस्तावेज़ को इंगित करेगा, जबकि एक एम्बेडेड दस्तावेज़
उसी दस्तावेज़ में उसी संग्रह में संग्रहीत किया जाता है।
इस स्कीमा पर विचार करें:
Person
-> name
-> address
Address
-> street
-> city
-> country
यदि आप उम्मीद करते हैं कि प्रत्येक व्यक्ति के पास केवल एक पता होगा और प्रत्येक पता केवल एक व्यक्ति (एक-से-एक संबंध) से जुड़ा होगा और आप आम तौर पर एक या अधिक व्यक्ति
के लिए डेटाबेस से पूछताछ करने जा रहे हैं। दस्तावेज़ों के बाद Person.address फ़ील्ड एम्बेडेडडॉक्यूमेंटफ़ील्ड
. होना चाहिए ।
यदि आप उम्मीद करते हैं कि प्रत्येक व्यक्ति के पास एक से अधिक पते होंगे, लेकिन प्रत्येक पता केवल एक व्यक्ति (एक-से-अनेक संबंध) से संबद्ध होगा और आप अभी भी मुख्य रूप से किसी व्यक्ति के लिए क्वेरी करेंगे तो आप एक एम्बेडेडडॉक्यूमेंटलिस्टफ़िल्डकोड का उपयोग कर सकते हैं। कोड> ।
यदि आप उम्मीद करते हैं कि प्रत्येक व्यक्ति के पास एक से अधिक पते होंगे और प्रत्येक पता कई लोगों से जुड़ा होगा (कई-से-अनेक संबंध) तो आपको संभवतः ReferenceField
का उपयोग करना चाहिए ।
हालाँकि, भले ही आप एक-से-एक या एक-से-अनेक हों, यदि पता
आपके डेटा मॉडल का हिस्सा है जो रुचि का है तो इसे अपने संग्रह में संग्रहीत करना फायदेमंद हो सकता है क्योंकि यह एकत्रीकरण और अनुक्रमण को आसान बनाता है।
विचार करने के लिए एक अन्य बिंदु यह है कि जब तक आप इसे चालू न करें बंद
mongoengine प्रत्येक ReferenceField
. को डी-रेफरेंस करेगा जब आप कोई दस्तावेज़ पुनर्प्राप्त करते हैं - यह बहुत सारे ReferenceField
. के साथ प्रदर्शन दंड पेश कर सकता है या बहुत बड़े दस्तावेज़ों के संदर्भ।