इस पोस्ट में, हम आपको दिखाएंगे कि अपने आवेदन डेटा को मॉडलिंग करने के लिए एक अधिक सीधे-आगे, स्कीमा-आधारित समाधान बनाने के लिए अपने MongoDB परिनियोजन के लिए Mongoose का उपयोग कैसे करें।
पी>नेवला क्या है?
Mongoose एक "नोड.js के लिए सुंदर MongoDB ऑब्जेक्ट मॉडलिंग है। ". यदि आपने पहले MongoDB का उपयोग किया है और बुनियादी डेटाबेस संचालन की कोशिश की है, तो आपने देखा होगा कि MongoDB "स्कीमा-रहित" है। जब आप अधिक संरचित डेटाबेस को लागू करना चाहते हैं और MongoDB की शक्ति का लाभ उठाना चाहते हैं, तो Mongoose ODM में से एक है (O वस्तु डी एटा एम ऐपिंग) समाधान।
जल्दी से प्रदर्शित करने के लिए, आप इस तरह के उपयोगकर्ताओं नामक संग्रह में एक सम्मिलित कमांड चलाते हैं:
db.users.insert({ name : 'Arvind', gender : 'male'});
और उसके ठीक बाद, आप दौड़ सकते हैं:
db.users.insert({ name : 'Arvind', gender : 'male', password : '!@#$'});
और MongoDB कॉलमों की संख्या (की-वैल्यू पेयर) में भिन्नता के बारे में कभी भी शिकायत नहीं करेगा। यह बहुत ही लचीला है। लेकिन जब आप अपने डेटा को अधिक व्यवस्थित और संरचित रखना चाहते हैं, तो आपको इसे अपने सर्वर कोड में बनाए रखना होगा, सत्यापन लिखना, यह सुनिश्चित करना कि संग्रह में कुछ भी अप्रासंगिक नहीं है। यहीं पर नेवला जीवन को आसान बनाता है।
“नेवला आपके एप्लिकेशन डेटा को मॉडलिंग करने के लिए एक सीधा-सीधा, स्कीमा-आधारित समाधान प्रदान करता है और इसमें अंतर्निर्मित टाइपकास्टिंग, सत्यापन, क्वेरी बिल्डिंग, व्यावसायिक तर्क हुक और बहुत कुछ शामिल है। , लीक से हटकर।”
Node.js और MongoDB स्थापित करें
Mongoose का उपयोग करने के लिए, हमें Node.js इंस्टॉल करना होगा। आप यहां जानकारी पा सकते हैं।
विकास करना प्रारंभ करें
सबसे पहले, आइए एक छोटा सा खेल का मैदान बनाएं जहां हम मस्ती कर सकें। myMongooseApp नाम से एक नया फोल्डर बनाएं और यहां टर्मिनल/प्रॉम्प्ट खोलें और रन करें:
npm init
यह हमें एक नया नोड प्रोजेक्ट शुरू करने में मदद करेगा। इसे आवश्यकतानुसार भरें। इसके बाद, हम अपने प्रोजेक्ट पर निर्भरता के रूप में Mongoose स्थापित करेंगे। भागो:
npm install mongoose --save-dev
फिर, MongoDB सेवा को चलाकर प्रारंभ करें:
mongod
अगला, एक नई फ़ाइल बनाएं जिसका नाम index.js है और फिर इसे अपने पसंदीदा संपादक में खोलें। नीचे दिया गया कोड जोड़ें:
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/myTestDB'); var db = mongoose.connection; db.on('error', function (err) { console.log('connection error', err); }); db.once('open', function () { console.log('connected.'); });
यहां, हमें डेटाबेस से कनेक्ट करने और कनेक्शन को इनिशियलाइज़ करने के लिए Mongoose पैकेज की आवश्यकता होती है। हमारे डेटाबेस का नाम myTestDB है।
फिर, दौड़ें:
node index.js
अब आपको कनेक्टेड संदेश देखना चाहिए। आप परिवर्तन पर नोड सर्वर को स्वचालित रूप से पुनरारंभ करने के लिए नोडमॉन नामक नोड पैकेज का भी उपयोग कर सकते हैं।
अब, हमारा सैंडबॉक्स खेलने के लिए तैयार है!
नेवला स्कीमा
स्कीमा कंकालों की तरह होती हैं, जो आपके डेटा संग्रह के दिखने की खुली हड्डियाँ हैं। यदि आप उपयोगकर्ताओं के संग्रह के साथ काम कर रहे हैं, तो आपकी स्कीमा कुछ इस तरह दिखाई देगी:
Name - String Age - Number Gender - String Date of Birth - Date
यदि आप उत्पादों के संग्रह के साथ काम कर रहे हैं, तो आपकी स्कीमा कुछ इस तरह दिखाई देगी:
SKU - String Name - String Price - Number InStock - Boolean Quantity - Number
आप बहाव देख सकते हैं। जब हमारे डेटा को इस तरह के स्कीमा से सुरक्षित किया जाता है, तो कचरा डेटा संग्रहीत करने की संभावना बहुत कम हो जाती है।
अब जबकि हमें स्कीमा की समझ मिल गई है, आइए Mongoose का उपयोग करके एक उपयोगकर्ता स्कीमा बनाने का प्रयास करें। index.js पर वापस जाएं और नीचे दिया गया कोड जोड़ें:
var Schema = mongoose.Schema; var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean });
यहां बुनियादी उपयोगकर्ता-संबंधित फ़ील्ड और उनके स्कीमा प्रकार खोजें।
अगला, हम स्कीमा से एक मॉडल बनाएंगे। जोड़ें:
var User = mongoose.model('User', userSchema);
बस, हमारा उपयोगकर्ता मॉडल तैयार है! हम इसे डेटाबेस में उपयोगकर्ताओं को सम्मिलित करने के लिए अपने आधार स्कीमा के रूप में उपयोग करेंगे। इस तरह, हम जानते हैं कि उपयोगकर्ता संग्रह के प्रत्येक दस्तावेज़ में स्कीमा पर सूचीबद्ध फ़ील्ड होंगे। आइए एक नया उपयोगकर्ता उदाहरण बनाएं और इसे डीबी में सहेजें। जोड़ें:
var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true }); arvind.save(function (err, data) { if (err) console.log(err); else console.log('Saved : ', data ); });
आपको कुछ इस तरह दिखना चाहिए:
Saved : { __v: 0, name: 'Arvind', age: 99, DOB: Fri Jan 01 1915 00:00:00 GMT+0530 (IST), isAlive: true, _id: 536a4866dba434390d728216 }
कोई झंझट नहीं, कोई समस्या नहीं। मॉडल के साथ बातचीत करने के लिए सरल और आसान एपीआई।
मान लें कि हम चाहते हैं कि प्रत्येक मॉडल में isYounger नाम की एक विधि हो। यदि आयु 50 से कम है, और अधिक होने पर गलत है तो यह विधि सही होगी। हम वर्तमान उपयोगकर्ता के लिए डेटाबेस को क्वेरी करके, फिर कंडीशनिंग की जाँच करके और सही या गलत लौटने पर ऐसा कर सकते हैं।
लेकिन क्या होगा यदि हम इस पद्धति को उपयोगकर्ता स्कीमा के सभी मॉडलों पर लागू करना चाहते हैं? हम इसे Mongoose में इस तरह करते हैं:
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/myTestDB'); var db = mongoose.connection; db.on('error', function (err) { console.log('connection error', err); }); db.once('open', function () { console.log('connected.'); }); var Schema = mongoose.Schema; var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }); userSchema.methods.isYounger = function () { return this.model('User').age < 50 ? true : false; } var User = mongoose.model('User', userSchema); var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true }); arvind.save(function (err, data) { if (err) console.log(err); else console.log('Saved ', data ); }); console.log('isYounger : ',arvind.isYounger());
पंक्ति 21 पर, हम मेथड डेफिनिशन जोड़ते हैं, और लाइन 39 पर परिणाम गलत होगा। यह आपके स्कीमा में विधियों को जोड़ने का एक सरल, आसान तरीका है, जिससे यह अधिक ऑब्जेक्ट-ओरिएंटेड-ईश बन जाता है।
यदि आपके पास पासवर्ड फ़ील्ड है, तो आप पासवर्ड को एन्क्रिप्ट करने के लिए एन्क्रिप्टपासवर्ड () जैसी विधि जोड़ सकते हैं और पासवर्ड की तुलना करने के लिए पासवर्ड की तुलना उपयोगकर्ता स्कीमा से कर सकते हैं। आप यहां पासवर्ड प्रमाणीकरण के बारे में अधिक पढ़ सकते हैं।
आउट-ऑफ-द-बॉक्स Mongoose स्कीमा बनाते समय कुछ विकल्प भी प्रदान करता है। उदाहरण के लिए, यदि आप नीचे दी गई स्कीमा घोषणा पर एक नज़र डालते हैं, तो हम एक विकल्प दे रहे हैं सख्त:झूठा:
var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }, {strict : false});
सख्त विकल्प डिफ़ॉल्ट रूप से सही होता है और यह 'गैर-स्कीमा' कुंजी-मूल्य जोड़े को सहेजने की अनुमति नहीं देता है। उदाहरण के लिए, इसे सहेजा जाएगा:
var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true });
जबकि:
var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true, bucketList : [{...}, {...}, {...} ] });
उपरोक्त सभी को बकेट लिस्ट से घटाकर सहेजा जाएगा क्योंकि इसे स्कीमा के हिस्से के रूप में घोषित नहीं किया गया था। इसलिए, आपकी सेवाओं का उपभोग करने वाला कोई भी ग्राहक अमान्य डेटा को आपके संग्रह में डंप नहीं कर पाएगा।
एक और अच्छा विकल्प संग्रह है। यदि आप नहीं चाहते कि आपका मॉडल नाम संग्रह नाम के समान हो, तो आप नाम को एक विकल्प के रूप में पास कर सकते हैं जैसे:
var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }, {collection : 'appusers'});
आप अन्य विकल्पों की सूची यहां देख सकते हैं।
Mongoose के साथ, आप अपने स्कीमा में ईवेंट भी जोड़ सकते हैं जैसे प्री-सेव या पोस्ट सेव, जहां आप संबंधित ईवेंट में सत्यापन, डेटा प्रोसेस कर सकते हैं या अन्य क्वेरी चला सकते हैं। इन विधियों को मिडलवेयर कहा जाता है।
एक साधारण उदाहरण समानांतर मिडलवेयर हो सकता है जैसे:
var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }) schema.pre('save', true, function (next, done) { // calling next kicks off the next middleware in parallel next(); doAsync(done); });
आप यहां मिडलवेयर के बारे में अधिक पढ़ सकते हैं। अपनी अगली पोस्ट में, हम आपके MongoDB प्रोजेक्ट के लिए स्वचालित रूप से मचान उत्पन्न करने के लिए Yeoman का उपयोग करने के बारे में अधिक बात करेंगे।
पढ़ने के लिए धन्यवाद। टिप्पणी करें।
@arvindr21