آموزش مرحله به مرحله MongoDB

چهارشنبه 22 مهر 1394

در این مقاله MongoDB را به صورت مرحله به مرحله آموزش خواهیم داد.شما با نحوه نصب و کارکردن با چهار عمل اصلی در این نوع دیتابیس آشنا خواهید شد

آموزش مرحله به مرحله 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 database

حال بیایید نگاهی به تفاوت MongoDB و RDBMS (دیتابیس های رابطه ای) بیاندازیم

RDBMS vs MongoDB

نصب 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 Server

صفحه Mongo client

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) شکل دستورات مانند زیر است .

commands in the MongoDB

دستور 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() اطلاعات به صورت زیبا و فرمت بندی شده نمایش داده خواهد شد.

see all the records inserted

دقت کنید که در هنگام تعریف شی هیچ 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 است .این دستور کل اطلاعات ذخیره شده را برمی گرداند.

find command

حال کد زیر را در نظر بگیرید.

db.marks.find({name:'student0'})  

با این دستور کلیه اطلاعات مربوط به student0 را در کالکشن Marks نمایش می دهیم .

find all the records

حال دستور زیر را در نظر بگیرید

db.marks.find({name:'student0',subject:'computer'}).pretty()  

در این دستور اطلاعات مربوط به دانشجوی صفر که رشته او کامپیوتر است نمایش داده می شود.

record

برای یافتن دانشجویان رشته کامپیوتر که نمره آنها بالاتر از 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 یک آرایه از نتیجه کوئری برمیگرداند

array of criteria

حال یک کالکشن دیگر ایجاد می کنیم به نام 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']}})  

sequence

دستور Update()

Syntax این دستور به شکل زیر است.

db.[collectionName].update({matching criteria},{updated value});

کد زیر را در نظر بگیرید

db.additionalsubject.update({name:'student1'},{subject:['craft']})  

قبل از به روزرسانی شکل دیتا بیس اینگونه است:

change the subject field

بعد از به روز رسانی به صورت زیر در خواهد آمد

After updating document

این دستور کلیه رشته ها را تغییر خواهد داد و مناسب نیست.برای حذف فیلدی که نمیخواهیم به روزرسانی شود از $unset استفاده می کنیم.

شکل دیگری از دستور Update:

استفاده از دستور $set :

db.additionalsubject.update({name:'student2'},{$set:{name:'xyz'}})  

قبل از به روز رسانی

old value

بعد از به روز رسانی

new value

برای به روز رسانی آرایه در سند دستورات مختلفی داریم که چند مثال را با هم بررسی می کنیم.

تغییر رشته دانشجوی شماره 3 از ورزش به هنر

db.additionalsubject.update({name:'student3'},{$set:{'subject.0':'arts'}});

Change subject

برای افزودن یک رکورد دیگر به رشته در دانشجوی شماره 3 کد زیر را تایپ کنید

db.additionalsubject.update({name:'student3'},{$push:{'subject':'sports'}})  

برای حذف مقدار از آرایه از عملگر $pop استفاده می کنیم به شکل زیر

$pop  :1 سمت راست ترین مقدار را حذف خواهد کرد
$pop :-1سمت چپ ترین مقدار را حذف خواهد کرد

db.additionalsubject.update({name:'student3'},{$pop:{'subject':1}}); 

remove a value

همچنین دستور $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({})  

آموزش سی شارپ

آموزش mongodb

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 10k بازدید
  • 4 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید