آموزش مرحله به مرحله MongoDB
چهارشنبه 22 مهر 1394در این مقاله MongoDB را به صورت مرحله به مرحله آموزش خواهیم داد.شما با نحوه نصب و کارکردن با چهار عمل اصلی در این نوع دیتابیس آشنا خواهید شد
MongoDB یک دیتابیس Open Source سندگرا است .و در زمره دیتابیس های No-Sql و البته محبوب ترین آنها دسته بندی می شود .همانطور که گفته شده یک پایگاه داده سندگراست و بر خلاف پایگاه داده های رابطه ای از اسناد json هم پشتیبانی می کند.در این دیتابیس الزامی به دوبعدی بودن جداول نداریم و هر کدام از فیلد های ما خود می تواند به صورت چند بعدی پیاده سازی شود.
زبانی که با آن می توانید با MongoDB ارتباط برقرار کنید جاوااسکریپت است .این دستورات جاوااسکریپتی را باید درون محیط shell بنویسید.سند در اینجا همان مفهوم رکورد در Sql را دارد.کالکشن در اینجا همان جداول در sql است.
در صورت تمایل میتوانید دوره آموزش جامع MongoDB در سایت تاپ لرن را مشاهده کنید.
MongoDB میتواند در لینوکس ویندوز و Mac نصب شود.به خاطر اینکه یک دیتابیس چند platform است.
MongoDB ،join را پشتیبانی نمی کند.ولی می تواند ساختار داده های سلسله مراتبی پیچیده را به خوبی نمایش دهد.ولی از بهترین ویژگی های آن این است که کارایی بالا و مقیاس پذیری زیادی دارد.
MongoDB شامل مجموعه ای از دیتابس هاست که هر دیتابیس خود شامل چندین مجموعه یا Collection است . MongoDB یک دیتابیس Schema-less است .به این معنی که هر مجموعه میتواند شامل اشیاء مختلفی باشد.این اشیا مختلف سند یا Document هم نامیده می شوند.سند ها توسط json یا (JavaScript Object Notation) نمایش داده می شوند.json مجموعه ای مرکب از زوجهای کلید و مقدار می باشد.این مقدار میتواند شامل مقادیر اولیه ، آرایه ای از اسناد، یا دوباره لیستی از زوج های کلیدو مقدار باشد.
حال بیایید نگاهی به تفاوت MongoDB و RDBMS (دیتابیس های رابطه ای) بیاندازیم
نصب MongoDB
در سایت MongoDB میتوانید آخرین ورژن را دریافت کنید.اگر ویندوز شما 32 بیتی است شما هم نسخه 32 بیتی را دانلود کنید وگرنه نسخه 64 بیتی آن را دانلود کنید.نسخه 32 بیتی دیتابیس کوچکتری را ساپورت می کند، بنابراین برای تست و آموزش مناسب است .
SetUp برنامه را اجرا کنید.به صورت پیش فرض برنامه بر روی درایو c نصب خواهد شد.در داخل درایو C یک فولدر به نام data و بعد یک فولدر به نام db ایجاد می شود کلیه دیتابیس های شما در این مسیر ایجاد خواهد شد.
یک سند نمونه در MongoDB به شکل زیر است .
{ _id: ObjectID('4bd9e8e17cefd644108961bb'), name: 'Vivek', class: '12th', subjects: ['physics', 'chemistry', 'math', 'english', 'computer'], address: { house_no: '12B', block: 'B', sector: 12, city: 'noida', }, grade: [{ exam: 'unit test 1', score: '60%' }, { exam: 'unit test 2', score: '70%' } ] }
سند بالا حاوی اطلاعاتی راجع به دانشجو است که ساختار آن به صورت زوج های کلید و مقدار در آن رعایت شده است.این سند یک مقدار _id دارد که منحصر به فرد می باشد.زوج های دیگر عبارتند از Subject و مقدارش ، Name و مقدارش.با این کار کلیه اطلاعات مربوط به یک موجودیت را داخل یک سند نگه داری کرده ایم .انواع مختلفی از مقادیر در این سنمد دیده می شود.مانند عدد رشته آرایه و در آخر اگر به فیلد address نگاه کنید می بینید که خود آدرس به صورت یک سند به صورت زوجهای کلید و مقدار است.اگر میخواستیم این سند را در ساختار رابطه ای نمایش دهیم مجبور بودیم حداقل سه جدول داشته باشیم .یک جدول برای نگه داری اطلاعات پایه مانند _id,name,class یک جدول برای آدرس و یک جدول برای grade
معرفی MongoDB Shell
محیط command prompt ویندوز را باز کنید.و در آن تایپ کنید Mongod ، سرور MongoDB اجرا خواهد شد.پیغام ‘waiting for connections’ مبنی بر اینکه کانکشن را وارد کنید نمایش داده می شود.حال یک command prompt دیگر باز کنید.و در آن تایپ کنید:mongoo دقت کنید که صفحه اول را نبندید.
صفحه Mongo client
در صفحه Mongo Client اطلاعات مهمی به شما نمایش داده می شود از جمله ورژن shell که استفاده می کنید و ثانیا در Connecting To اطلاعات دیتابیسی که به آن متصل شده اید نمایش داده می شود.به صورت پیش فرض در این قسمت دیتابیس test قرار گرفته است .که دیتابیسی است که MongoDB به صورت خودکار می سازد.
دستورات MongoDB در این صفحه نوشته خواهد شد.این دستورات به زبان جاوااسکریپت است .
اگر در صفحه MongoO تایپ کنیدHelp و اینتر بزنید دستورات مهمی که به شما کمک خواهد کرد نمایش داده خواهد شد.
به دستورات زیر توجه کنید.
show dbs :دیتابیس های سیستم شما را نشان می دهد
show collections:کالکشن های موجود بر روی دیتابیس شما را نمایش می دهد
db.help():دستورات مورد نیاز در دیتابیس را نمایش می دهد.
db.mycoll.help():دستورات مورد نیاز در کالکشن را نمایش می دهد.
ساخت دیتابیس
در صفحه command تایپ کنید Use student با این کار دیتابیس به نام Student ساخته خواهد شد.حال باید در این دیتابیس یک کالکشن ایجاد کنیم .
db.mycol.insert({name:'vikas'})
Mycol نام کالکشن ماست .و داخل آن رکوردی درج کرده ایم .برای انجام عملیات CRUD یا همان (Create Read Update Delete) شکل دستورات مانند زیر است .
دستور Insert()
برای درج سند در کالکشن به کار می رود.همانطور که گفته شد اسناد در MongoDB به شکل Json نگه داری می شوندبه کد زیر توجه کنید.
doc = { name: 'xyx', class: '12th', subjects: ['physics', 'chemisrty', 'maths', 'english', 'computer'], address: { house_no: '123', sector: '50', city: 'noida' } } db.mycol.insert(doc);
در این کد یک Object به نام doc ایجاد کرده ایم .و از آن در دستور insert استفاده کرده ایم .حتی بدون اینکه object بسازیم هم میتوانستیم دستور Insert را به صورت مستقیم بنویسیم.
db.mycol.insert({ name: 'Vivek', class: '12th', subjects: ['physics', 'chemistry', 'math', 'english', 'computer'], address: { house_no: '12B', block: 'B', sector: 12, city: 'noida', }, grade: [{ exam: 'unit test 1', score: '60%' }, { exam: 'unit test 2', score: '70%' } ] });
اگر دستور db.my.col.find() تایپ کنید تمامی اطلاعات مربوط به کالکشن نمایش داده خواهد شد.اگر بنویسید db.my.col.find().pretty() اطلاعات به صورت زیبا و فرمت بندی شده نمایش داده خواهد شد.
دقت کنید که در هنگام تعریف شی هیچ id قرار ندادیم ، خود MongoDB این فیلد را به صورت یونیک قرار می دهد.
دستور Find()
قبل از بررسی این دستور اجازه دهید اطلاعات بیشتری در دیتابیس خود ذخیره کنیم .
for(i=0;i<100;i++) { subjects=['chemistry','physics','maths','english','computer']; for(j=0;j<5;j++) { db.marks.insert({ name:"student"+ i, subject:subjects[j], marks:Math.round(Math.random()*100) } ); } }
در کد بالا یک کالکشن marks ایجاد کرده ایم و 100 رکورد در آن درج کرده ایم .دستور db.CollectionName.find() معادل دستور SELECT * FROM Table در sql است .این دستور کل اطلاعات ذخیره شده را برمی گرداند.
حال کد زیر را در نظر بگیرید.
db.marks.find({name:'student0'})
با این دستور کلیه اطلاعات مربوط به student0 را در کالکشن Marks نمایش می دهیم .
حال دستور زیر را در نظر بگیرید
db.marks.find({name:'student0',subject:'computer'}).pretty()
در این دستور اطلاعات مربوط به دانشجوی صفر که رشته او کامپیوتر است نمایش داده می شود.
برای یافتن دانشجویان رشته کامپیوتر که نمره آنها بالاتر از 50 است از کد زیر استفاده می کنیم
db.marks.find({subject:'computer',marks:{$gt:50}}).pretty()
شکل های دستوری خلاصه شده زیر را به خاطر داشته باشید.
Greater than: $gt
Greater and Equal : $gte
Less than: $lt
Less and Equal: $lte
یافتن دانشجویان رشته کامپیوتری که نمره آنها بیشتر از 50 و کمتر از 90 است مانند کد زیر است .
db.marks.find({subject:'computer',marks:{$gt:50,$lte:90}}).pretty()
یافتن دانشجویانی در رشته فیزیک و کامپیوتر که نمره آنها بالاتر از 90 است :
db.marks.find({$or:[{subject:'computer'},{subject:'physics'}],marks:{$gt:90}})
$or یک آرایه از نتیجه کوئری برمیگرداند
حال یک کالکشن دیگر ایجاد می کنیم به نام additionalsubject.
db.additionalsubject.insert({name:'student1',subject:['arts','music']}) db.additionalsubject.insert({name:'student2',subject:['sports','arts']}) db.additionalsubject.insert({name:'student3',subject:['sports','cooking','music']}) db.additionalsubject.insert({name:'student4',subject:['arts','craft','music']})
می خواهیم دانشجویانی که رشته آنها هنر است را بیابیم .
db.additionalsubject.find({subject:'arts'})
اگر می خواستیم لیست دانشجویانی که در هر دو رشته هنرو موسیقی تحصیل می کنند را بیابیم کد ما به شکل زیر می شد.
db.additionalsubject.find({subject:{$all:['arts','music']}})
دستور Update()
Syntax این دستور به شکل زیر است.
db.[collectionName].update({matching criteria},{updated value});
کد زیر را در نظر بگیرید
db.additionalsubject.update({name:'student1'},{subject:['craft']})
قبل از به روزرسانی شکل دیتا بیس اینگونه است:
بعد از به روز رسانی به صورت زیر در خواهد آمد
این دستور کلیه رشته ها را تغییر خواهد داد و مناسب نیست.برای حذف فیلدی که نمیخواهیم به روزرسانی شود از $unset استفاده می کنیم.
شکل دیگری از دستور Update:
استفاده از دستور $set :
db.additionalsubject.update({name:'student2'},{$set:{name:'xyz'}})
قبل از به روز رسانی
بعد از به روز رسانی
برای به روز رسانی آرایه در سند دستورات مختلفی داریم که چند مثال را با هم بررسی می کنیم.
تغییر رشته دانشجوی شماره 3 از ورزش به هنر
db.additionalsubject.update({name:'student3'},{$set:{'subject.0':'arts'}});
برای افزودن یک رکورد دیگر به رشته در دانشجوی شماره 3 کد زیر را تایپ کنید
db.additionalsubject.update({name:'student3'},{$push:{'subject':'sports'}})
برای حذف مقدار از آرایه از عملگر $pop استفاده می کنیم به شکل زیر
$pop :1 سمت راست ترین مقدار را حذف خواهد کرد
$pop :-1سمت چپ ترین مقدار را حذف خواهد کرد
db.additionalsubject.update({name:'student3'},{$pop:{'subject':1}});
همچنین دستور $push All برای افزودن یک یا چند مقدار به آرایه را داریم کد آن به شکل زیر است :
db.additionalsubject.update({name:'student3'},{$pushAll:{'subject':['sports','craft']}}) db.additionalsubject.update({name:'student3'},{$pullAll:{'subject':['sports','craft']}})
MongoDB فقط یک سند را به روزرسانی می کند ولی اگر شما بخواهید در یک زمان همه اسناد را به روزرسانی کنید باید یک پارامتر multi:true هم به کد اضافه می کنی.به کد زیر دقت کنید.
db.additionalsubject.update({},{$set:{'class':’12th’}},{multi:true})
این کد یک فیلد به نام Class به تمام اسناد داخل Collection می افزاید
دستور Remove()
این دستور برای حذف رکورد از کالکشن مورد استفاده قرار می گیرد.مثلا اگر بخواهیم رکورد مربوط به دانشجوی شماره 3 را حذف نماییم از دستور زیر استفاده می کنیم
db.additionalsubject.remove({name:'student3'})
برای حذف کل سند از یک کالکشن کد زیر را می نویسیم
db.additionalsubject.remove({})
- C#.net
- 11k بازدید
- 4 تشکر