मैं इसे एक नई परियोजना के साथ उपयोग कर रहा हूं, लेकिन यह मोंगोडीबी का उपयोग करने वाला मेरा पहला समय भी है। एक स्कीमा को परिभाषित करना अनावश्यक लगता है क्योंकि मैंने सोचा था कि मोंगो का उदय यह था कि इसे परिभाषित योजनाओं की आवश्यकता नहीं थी। क्या मैं सिर्फ फ्लाई पर ऑब्जेक्ट्स को सहेज नहीं सकता, चाहे स्कीमा चाहे? तो मैं क्यों चाहूंगा? इसके अलावा दस्तावेज की कमी है, कुछ चीजें बनाने के लिए मैं आसानी से मोंगो खोल में कर सकता हूं तो वे होना चाहिए।मोंगोस ओआरएम का उपयोग करने के लिए हत्यारा कारण क्या है?
उत्तर
मोंगो डीबी के लिए मोंगोस के बारे में सबसे अच्छी बात यह तथ्य है कि आप उस डेटा के स्वचालित सत्यापन को अंतर्निहित कर सकते हैं जिसे आप डालने/अपडेट कर रहे हैं। मोंगोस आपको दस्तावेज़ों को सहेजने से पहले, कहने के लिए घटनाओं को पूर्व-परिभाषित करने की क्षमता भी देता है। यह बहुत शक्तिशाली है क्योंकि यह उस कोड को समेकित करता है जिसे आपको लिखना होगा, और यह उस कोड को रखता है जहां यह दस्तावेज़ तर्क के बगल में होना चाहिए, न कि एप्लिकेशन तर्क में।
middleware और कुछ उदाहरणों के लिए सत्यापन देखें। गीथब पर एलेक्स्यॉन्ग/नोडपैड models.js file में कुछ अच्छे उदाहरण हैं।
पहले से परिभाषित स्कीमा को जानना आसान हो सकता है, क्योंकि तब आप उन धारणाओं को बना सकते हैं जिन्हें आप अन्यथा सक्षम नहीं कर सकते हैं।
उदाहरण के लिए, यदि मेरे पास Post
स्कीमा है, तो मैं मान सकता हूं कि इसमें body
फ़ील्ड है और इसे String
के रूप में इसका अस्तित्व जांचने के बिना उपयोग करें।
अनुमोदित, यहां तक कि मेरे अच्छी तरह से परिभाषित मॉडल पर भी, मेरे अंदर एक स्कीमलेस दस्तावेज़ के बराबर हो सकता है, उदा।
mongoose.model('Post', new Schema({
body: String,
meta: {}
}));
और फिर मैं बहुत आसानी से myPost.meta पर यादृच्छिक डेटा जोड़ सकता हूं। यह परिभाषित स्कीमा और स्कीमालेस के बीच मेरे लिए बहुत अच्छा संतुलन प्रदान करता है।
मैंने मोंगोस का उपयोग किया है और मुझे कहना है कि मैं पूरी तरह से सहमत हूं कि आपकी स्कीमा को परिभाषित करने से पहले गंभीर रूप से मोंगोडीबी को सीमित कर दिया जाता है। मोंगोस के पीछे विचार इसे सुरक्षित बनाना था और आसान रखरखाव की अनुमति देता था लेकिन वास्तव में दस्तावेज़-आधारित डेटाबेस के लिए अपील नहीं करता है।
मैंने अपनी रिलीज के करीब मोंगोज़ को चेक आउट किया है, और यह पोस्ट और ओप के पोस्ट पॉइंट्स क्या हैं - आप वास्तव में दस्तावेज़ों को बहुत अच्छी तरह से नहीं पढ़ते हैं। Mongoose हमेशा फ़ील्ड के लिए मिश्रित स्कीमा प्रकार था, जो किसी भी और सभी डेटा को आप विज्ञापन-प्रसार को सहेजना चाहते हैं। वास्तव में, यदि आप चाहें तो - आप अपने संग्रह को इस तरह के फैशन में व्यवहार कर सकते हैं, लेकिन यह आपके आवेदन को गंभीर रूप से बाधित करता है। यदि आपको यह देखने की आवश्यकता है कि डेटा हर समय मौजूद है या नहीं, तो आपके पास वास्तव में कोई संरचना नहीं है, जिसके परिणामस्वरूप बग, समस्याएं और डेटा विसंगतियां होती हैं। – Oddman
आप वास्तव में किसी भी तरह से जा सकते हैं। कई अन्य भाषाओं में मोंगोडीबी के लिए कई लोकप्रिय मैपर हैं: जावा के लिए मॉर्फिया, PHP के लिए डॉक्टर, रूबी के लिए मोंगोइड/मोंगोमापर इत्यादि।
हालांकि मोंगोडीबी "स्कीमा-कम" है, यह "स्कीमा-मुक्त" नहीं है। डीबी से बाहर आने की अपेक्षा करने के बारे में कुछ कहना है।
बेशक, विज्ञापन-वस्तु वस्तु बनाने और इसे सहेजने के बारे में कुछ भी सुरुचिपूर्ण है। इस बिंदु पर, node.js बहुत नया है और आपकी पसंद की सामग्री के साथ काम करना शायद सबसे अच्छा है।
इसके अलावा दस्तावेज की कमी है, कुछ चीजें बनाने के लिए मैं आसानी से मोंगो खोल में आसानी से कर सकता हूं तो उन्हें होना चाहिए।
मोंगोस अभी भी एक सामुदायिक परियोजना है और यह अपेक्षाकृत नया है। यदि दस्तावेज़ गायब हैं या लिखे जाने की आवश्यकता है, तो मुझे यकीन है कि विकास टीम सहायता से प्यार करेगी। आप उनके साथ on the groups कनेक्ट कर सकते हैं।
मोंगोडीबी स्कीमालेस को कॉल करते समय, यह वास्तव में इस तथ्य को संदर्भित करता है कि डेटाबेस को स्वयं को कोई स्कीमा और स्कीमा माइग्रेशन की आवश्यकता नहीं होती है। इसका मतलब यह नहीं है कि आपका डेटा हमेशा अनियंत्रित है - ज्यादातर मामलों में आप अपने डेटा को संरचित करना चाहते हैं, और प्रकृति से, यह आमतौर पर होता है। –
निश्चित रूप से ऐसे मामले हैं जहां आप डेटा माइग्रेट करना चाहते हैं। – chovy
@ एनब्रो - इस सवाल को संपादित करने में शून्य मूल्य था, बस लाइन-ब्रेक जोड़ने के लिए, * विशेष रूप से * 1 से) यह 4 साल पुराना है, और 2) आज के स्टैक ओवरफ्लो दिशानिर्देशों के तहत, यह प्रश्न अब राय-आधारित के रूप में ऑफ-विषय है। आपने एक नई परियोजना के बारे में प्रस्तावना संपादित करने और मोंगोडीबी (जो पूरी तरह से अनिवार्य है) का उपयोग करने के लिए पहली बार समय निकालने का समय नहीं लिया। –