mongoose बनाम मोंगोडब (नोडज मॉड्यूल / एक्सटेंशन), ​​कौन सा बेहतर है? और क्यों?


109

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

संपादित करें: एक नया पुस्तकालय मिला, जो दिलचस्प नोड-मंगोलियन भी लगता है और "मंगोलियाई डेडबीफ एक भयानक मोंगो डीबी नोड। जेएस ड्राइवर है जो मोंगोडब शेल को करीब से देखने का प्रयास करता है।" (Readme.md)

https://github.com/marcello3d/node-mongolian

यह सिर्फ नए लोगों के लिए और अधिक संसाधनों को जोड़ने के लिए है जो इसे देखते हैं, इसलिए मूल रूप से मंगोलियाई जैसे एक ODM ...


स्कीमा कम डेटाबेस के लिए स्कीमा लेयर का उपयोग क्यों करें। यदि आप एक स्कीमा आधारित डेटाबेस का उपयोग करना चाहते हैं जो इसके लिए कुछ और है। (मोंगोज़ सिर्फ मोंगोद के एक स्कीमा एब्स्ट्रैक्शन है)
साइमन ड्रग्सबेक

जवाबों:


123

Mongoose उच्च स्तर है और MongoDB ड्राइवर का उपयोग करता है (यह एक निर्भरता है, package.json की जांच करें), इसलिए आप उन विकल्पों को देखते हुए इसका उपयोग करेंगे। सवाल जो आपको खुद से पूछना चाहिए था, "क्या मैं कच्चे ड्राइवर का उपयोग करना चाहता हूं, या क्या मुझे ऑब्जेक्ट-दस्तावेज़ मॉडलिंग टूल की आवश्यकता है?" यदि आप एक वस्तु मॉडलिंग (ODM, SQL दुनिया से ORMs के लिए एक समकक्ष) उपकरण की तलाश कर रहे हैं, तो कुछ निचले स्तर के काम को छोड़ने के लिए, आप Mongoose चाहते हैं।

यदि आप एक ड्राइवर चाहते हैं, क्योंकि आप बहुत सारे नियमों को तोड़ने का इरादा रखते हैं जो एक ODM लागू कर सकते हैं, तो MongoDB के साथ जाएं। यदि आप एक तेज़ ड्राइवर चाहते हैं, और कुछ गुम सुविधाओं के साथ रह सकते हैं, तो मंगोलियाई डेडबीफ को एक कोशिश दें: https://github.com/marcello3d/node-mongolian


34

मोंगोज़, अब तक, सबसे लोकप्रिय है। मैं इसका उपयोग करता हूं, और दूसरों का उपयोग नहीं किया है। इसलिए मैं दूसरों के बारे में नहीं बोल सकता, लेकिन मैं आपको मानगो के साथ अपनी पकड़ बता सकता हूं।

  • मुश्किल / खराब प्रलेखन
  • मॉडल का उपयोग किया जाता है। और वे आपके दस्तावेजों के लिए संरचना को परिभाषित करते हैं। फिर भी यह मोंगो के लिए अजीब लगता है, जहां इसका एक फायदा यह है कि आप एक कॉलम (इरेट, एट्रिब्यूट?) में फेंक सकते हैं या बस एक नहीं जोड़ सकते हैं।
  • मॉडल केस संवेदी होते हैं - मैं और मेरे साथ काम करने वाले अन्य देवता के पास ऐसे मुद्दे होते हैं जहां संग्रह नाम का मामला जिसे मॉडल के साथ परिभाषित किया गया है, इसके कारण कुछ भी नहीं बचा सकता है, w / o त्रुटि। हमने पाया है कि सभी लोअरकेस नामों का उपयोग करना सबसे अच्छा काम करता है। जैसे कुछ करने के बजाय ऐसा करना mongooseInstace.model('MyCollection', { "_id": Number, "xyz": String })बेहतर है (भले ही संग्रह नाम वास्तव में हो MyCollection):mongooseInstace.model('mycollection', { "_id": Number, "xyz": String })

लेकिन ईमानदारी से, यह वास्तव में उपयोगी है। सबसे बड़ा मुद्दा प्रलेखन है। यह वहां है, लेकिन यह सूखी और कठिन है कि आपको क्या चाहिए। यह बेहतर स्पष्टीकरण और अधिक उदाहरणों का उपयोग कर सकता है। लेकिन एक बार जब आप इन चीजों को पा लेते हैं तो यह वास्तव में अच्छी तरह से काम करती है।


11
पुन: प्रलेखन। मैं और अधिक सहमत नहीं हो सका। प्रलेखन खराब है और बहुत अधिक मामलों को बदतर बनाता है, यह स्थानों में गलत है। मैंने अक्सर अपने आप को कोड को खोलते हुए पाया है (जो इतनी बुरी बात नहीं है), लेकिन प्रलेखन मुद्दों के कारण।
जेपी रिचर्डसन

1
AFAIK संग्रह के नाम मोंगो में संवेदनशील हैं, न कि Mongoose में।
निक कैंपबेल

34
मामले में कोई भी सोच रहा था कि प्रलेखन अब बहुत अच्छा है।
केविन बील

7
मैं सहमत नहीं हूँ, प्रलेखन अभी भी कठिन है।
स्टीव के

5
इस बात से भी सहमत होंगे कि दस्तावेज में अभी भी कमी है
ब्रेंडन वेनस्टेन

25

मैं नए ऐप का निर्माण कर रहा हूं और अब इसकी संरचना तैयार कर रहा हूं, यहां कुछ विचार हैं कि मैंंगो का उपयोग क्यों करना है या नहीं करना है:

  1. मानगो धीमा होगा (बड़े ऐप के लिए)
  2. अधिक जटिल प्रश्नों के साथ मानगो कठिन है
  3. ऐसी परिस्थितियां होंगी जब आप अधिक गति चाहते हैं और आप बिना मूंग के जाना पसंद करेंगे तो आपके पास मानगो और आधे w / o के साथ आधे प्रश्न होंगे। यह पागल स्थिति है, एक बार था ..
  4. मानगो आपको सरल डीबी संरचना के साथ सरल एप्लिकेशन के साथ तेजी से कोड बना देगा
  5. Mongoose आपको मोंगोडब डॉक्स और मोंगोज़ डॉक्स पढ़ने देगा
  6. आम के साथ आपके ढेर पर निर्भर होने के लिए एक और चीज मिलेगी और यह दुर्घटनाग्रस्त होने और राख में जलने की एक और संभावना है।

mongodb ड्राइवर कच्चा ड्राइवर है, आप सीधे mongodb से संपर्क करते हैं। मैंगोज़ एब्सट्रैक्शन लेयर है। आपको आसान I / O से db मिलता है जबकि आपकी db संरचना काफी सरल है।

अमूर्तता इसमें आवश्यकताएं लाती है और आपको इसका पालन करना होता है। आपका ऐप धीमा हो जाएगा, अधिक रैम खाएं और अधिक जटिल हो, लेकिन यदि आप जानते हैं कि इसका उपयोग कैसे करना है, तो आप तेजी से साधारण वस्तुओं को लिख सकते हैं, उन डेटाबेस को बचा सकते हैं।

मोंगोज़ के बिना आपके पास मोंगोडब से सीधे कनेक्शन के साथ तेज आवेदन होगा। कोई नहीं कहता है, कि आप db को सामान बचाने के लिए अपने मॉडल नहीं लिख सकते। आप ऐसा कर सकते हैं। और मुझे लगता है कि यह आसान है। आप कोड लिखते हैं, जिसका आप उपयोग करेंगे, आपको पता है कि आपको क्या चाहिए। आप अमूर्त परत छोटी होगी, फिर मोंगोज़।

मैं PHP की दुनिया से आ रहा हूँ, वहाँ हम मूल्यह्रास mysql_ फ़ंक्शंस के साथ कच्चे sql थे, तो हमें PDO मिला - sql के साथ संचार करने के लिए ऑब्जेक्ट एब्सट्रैक्ट परत। या आप कुछ भारी ओआरएम चुन सकते हैं जैसे डॉक्ट्रीन में मूंगदो पर सामान रखने के लिए समान सामान। सेटर / गेटर्स / सेव मेथड वगैरह वाली वस्तुएं। यह ठीक है, लेकिन अधिक अमूर्त जोड़कर आप अधिक फाइलें, अधिक तर्क, अधिक प्रलेखन, अधिक निर्भरता जोड़ रहे हैं। मुझे सामान को सरल रखना पसंद है और मेरे स्टैक में कम निर्भरता है। BTW, यही कारण है कि मैं पहले स्थान पर PHP से सर्वर-क्लाइंट जावास्क्रिप्ट में स्थानांतरित किया गया था।

मानगो के साथ मुझे लगता है कि कुछ सरल ऐप लिखना बहुत अच्छा है , जिसमें एसक्यूएल के समान सरल डीबी संरचना है । जब आप सबडिमेंमेंट करना शुरू करते हैं और उन सभी पागल प्रश्नों को बनाना चाहते हैं, तो मैंने पाया कि यह वास्तव में कठिन है। आपको mongodb डॉक्स को देखना है, फिर mongoose डॉक्स को देखें, यह जानने के लिए कि आपको कैसी क्वेरी बनानी है। कभी-कभी आप पाएंगे, कि मोंगोडब का एक्स भविष्य मोंगोज़ में नहीं है, इसलिए आप कच्चे मोंगोडब ड्राइवर के पास जाते हैं और एक या किसी अन्य स्थान पर कच्चे मोंगोडब प्रश्न लिखते हैं। मोंगोज़ के बिना, आप मोंगोडब डॉक्स को देखते हैं और अपनी क्वेरी करते हैं।


3
मुझे भी लगता है कि मोंगोडब, मोंगो से बेहतर है क्योंकि यह जटिल क्वेरी करने के लिए तेज़ और संभव है। यह बड़े एप्स के लिए बेहतर है और आपको कच्चे मोंगोडब ड्राइवर का इस्तेमाल करना चाहिए। मैं आपसे दृढ़ता से सहमत हूं।
अब्दुल अलीम शाकिर

अगर आप कोई बड़ा ऐप नहीं कर रहे हैं तो भी मैं आपसे दृढ़ता से सहमत हूं। मानगो में जटिल प्रश्न बहुत आसान होते हैं, उन्हें मानस में करने की तुलना में
जुआन

14

मैंने केवल मोंगोडब का उपयोग किया है। अपनी व्यक्तिगत राय में, मैं कुछ निम्न स्तर से शुरू करने और फिर ऊपर जाने की सलाह दूंगा। अन्यथा आप अपने आप को उच्च स्तर के ड्राइवरों द्वारा प्रदान किए गए अतिरिक्त उन्नत सुविधाओं का उपयोग करके पा सकते हैं, जैसे कोई वास्तविक लाभ नहीं।

मेरे पास मोंगोडब की समस्या है, जो नोड.जेएस के लिए स्थानिक है। खराब दस्तावेज है। वहाँ प्रलेखन और यह बहुत है, लेकिन यह हमेशा सबसे अधिक उपयोगी नहीं है। मैंने देखा है कि अब तक ड्राइवर के उत्पादन के उपयोग के अच्छे और गहन उदाहरण नहीं हैं। दस्तावेज़ीकरण कनेक्शन खोलने के एक ही अस्थायी उदाहरण से भरा है, एक कमांड जारी करें और कनेक्शन बंद करें। आप यह बता सकते हैं कि यह एक टेम्पलेट से कॉपी और पेस्ट किया गया है क्योंकि हर उदाहरण में हर उस चीज की आवश्यकता होती है जिसकी आवश्यकता हो सकती है बजाय इसके कि प्रत्येक उदाहरण के लिए क्या आवश्यक है।

पूरी तरह से यादृच्छिक पर लिया गया एक उदाहरण देने के लिए:

  • कच्चे {बूलियन, डिफ़ॉल्ट: असत्य}, कच्चे बोस बफ़र्स का उपयोग करके ऑपरेशन करते हैं।

क्या वास्तव में "कच्चे बन्स बफ़र्स का उपयोग करके ऑपरेशन करते हैं" करते हैं? मुझे यह कहीं भी समझाया नहीं गया और उस वाक्यांश की Google खोज से कोई मदद नहीं मिली। शायद मैं आगे Google कर सकता था लेकिन मुझे ऐसा नहीं करना चाहिए था। जानकारी होनी चाहिए। क्या इस विकल्प को सक्षम / अक्षम करने के लिए कोई प्रदर्शन, स्थिरता, अखंडता, संगतता, पोर्टेबिलिटी या कार्यात्मक रूप से फायदे हैं? मुझे वास्तव में कोड में गहराई से गोता लगाने के बिना कोई विचार नहीं है और यदि आप मेरी नाव में हैं तो यह एक गंभीर समस्या है। मेरे पास एक डेमॉन है जहां सही दृढ़ता की आवश्यकता नहीं है लेकिन रनटाइम में प्रोग्राम को बहुत स्थिर होना चाहिए। मुझे लगता है कि इसका मतलब यह हो सकता है कि यह मुझे JSON के लिए डीसर्विलाइज़ और क्रमबद्ध करने की उम्मीद करता है या उपयोगकर्ता के लिए कुछ निम्न स्तर, आंतरिक और पारदर्शी है, लेकिन मैं गलत हो सकता है। यद्यपि मैं अच्छी धारणाएँ बनाने का प्रयास करता हूँ, लेकिन मैं महत्वपूर्ण प्रणाली बनाते समय धारणा और अनुमान पर भरोसा नहीं करता। इसलिए यहाँ मैं या तो कोड के साथ अपने दावे का परीक्षण कर सकता हूं या Google या उनके कोड में बहुत गहराई तक खुदाई कर सकता हूं। एक बंद के रूप में यह इतना बुरा नहीं है, लेकिन मैं अपने स्वयं के इस स्थिति में कई बार उनके प्रलेखन पढ़ते समय पाता हूं। अंतर का मतलब किसी कार्य बनाम घंटों में बिताए गए दिन हो सकते हैं। मुझे पुष्टि की आवश्यकता है और प्रलेखन मुश्किल से मुझे स्पष्टीकरण देता है, अकेले पुष्टि दें।

डॉक्यूमेंटेशन को रस्क किया जाता है। यह घटनाओं की व्याख्या नहीं करता है, जब त्रुटियों को फेंक दिया जाता है या उन त्रुटियों की प्रकृति के बारे में अस्पष्ट विवरण देता है और कनेक्टिविटी को पूरा करने के लिए अक्सर कई तरीके होते हैं जो अस्पष्ट हो सकते हैं। आप इसके द्वारा पूरी तरह से बेकार हो सकते हैं, लेकिन यह किनारों के आसपास बहुत उबड़ खाबड़ है। आप पाएंगे कि कुछ चीजें अनुमान और प्रयोग के लिए शेष हैं।


महान प्रलेखन के साथ महान सॉफ्टवेयर आता है। यह सबसे महत्वपूर्ण भागों में से एक है।
लुकास एलिसिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.