جواد جهانگیری
جواد جهانگیری
خواندن ۳۷ دقیقه·۳ سال پیش

آموزش دیتابیس مونگودبی MongoDB Tutorial

آموزش مونگودبی
آموزش مونگودبی

به نام آن که جان را فکرت آموخت / چراغ دل به نور جان برافروخت

با عرض سلام و وقت بخیر خدمت کاربران محترم سایت ویرگول، در این مقاله آموزشی که چکیده آموزش مونگودبی از سایت tutorialspoint بهمراه مطالب تکمیلی تر , سعی شده یک آموزش کاربردی و پروژه محور از مونگودبی ارایه گردد.ایده این سری مقاله های آموزشی از این موضوع سرچشمه می گیرد که بخشی از خوانندگان وجود دارد که به محتوای نوشتاری آنلاین بهتر پاسخ می دهند و ترجیج می دهند مهارت های جدید را به سرعت از طریق خواندن افزایش دهند.این سری اموزش ها با ارایه اولین پکیج آموزشی در خصوص مانگودبی آغاز می شود که انتظار می رود با واکنش مثبت کاربران همراه شود.

توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم. با کمال تشکر جواد جهانگیری
شماره تلفن همراه: 09149431772
نشانی پست الکترونیکی: javad.jahangiri.niopdc@gmail.com
فیلم‌های آموزشی در آپارات:جواد جهانگیری (CTO) - آپارات
فیلم آموزشی در یوتویب: javad jahangiri - YouTube
نسخه مقاله: ۱.۱ - تاریخ بروزرسانی: 1400/09/09

MongoDB - Home

MongoDB Tutorial

مونگو یک دیتابیس اوپن سورس و NoSQL می باشد که با زبان C++ برنامه نویسی شده است ما در این اموزش تصمیم داریم بری مفاهیم پایه ای مونگودبی تمرکز داشته باشیم و شما را در ایجاد و استقرار یک پایگاه داده مقایس پذیر و با پرفورمانس بالا کمک کنیم

Audience

این آموزش برای برنامه نویس های که در سطح پیشرفته می باشند طراحی شده است که می خواهند با بیان ساده و آسان با پایگاه داده مونگو دبی آشنا شوند در پایان این سری از اموزش ها شما به سطح متوسطی از تسلط بر روی این پایگاه داده دست خواهید یافت


Prerequisites

برای این اموزش می بایستی یک درک کلی از مفاهیم پایگاه داده را داشته باشید چون در این اموزش ما قصد داریم پایگاه داده ای با کارایی بالا ایجاد کنیم

https://www.aparat.com/javadjahangiriniopdc/playlists



MongoDB - Overview

مونگودبی یک پایگاه داده مستند گرا و چند پلتفرمی است که عملکرد بالا ، در دسترس بودن بالا و مقیاس پذیری آسان را ارائه می دهد و مونگو دبی روی مفهموم مجموعه و سندکار می کند

Database

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


Collection

کالکشن در مونگودبی گروه از مستندات مونگودبی می باشد در حقیقت یک کالکشن معادل مفهموم جدول در در دتیابیس های رابطه ای می باشد .هر کالکشن در یک دتیابیس مونگودبی قرار می گیرد و اجباری نیست که کالکشن ها اسکیماهای یکسان داشته باشند .سندهای موجود در هر کالکشن می تواند فیلدهای متفاوتی داشته باشد .بطور معمول ،همه اسناد موجود در یک کالکشن دارای اهداف مشابه و یا مرتبط به هم می باشند

Document

هر سند مجموعه ای از جفت های key-value می باشد.اسناد دارای اسیکما داینامک هستند .اسکیمای پویا به این معنی می باشد که اسناد موجود در یک کالکشن نیازی به مجموعه یکسانی از فیلدها و ساختار ندارند و فیلدهای مشترک در اسناد یک کالکشن ممکن است انواع مختلفی از داده ها را در خود جای دهد

جدول زیر رابطه اصطلاحات RDBMS با MongoDB را نشان می دهد.

The following table shows the relationship of RDBMS terminology with MongoDB
The following table shows the relationship of RDBMS terminology with MongoDB

Sample Document

مثال زیر ساختار سند یک وب سایت وبلاگی را نشان می دهد ، که به سادگی یک جفت مقدار کلید جدا شده با کاما است.

{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2011,1,20,2,15), like: 0 }, { user:'user2', message: 'My second comments', dateCreated: new Date(2011,1,25,7,45), like: 5 } ] }

ای دی _id یک عدد هگز دسیمال 12 بایتی است که منحصر به فرد بودن هر سند را تضمین می کند در هنگام درج یک سند می توانیم id ان را ارایه کنیم و لی اگر ارایه نشود خود مونگودبی یک شناسه منحصر به فرد بریا هر سند ثبت می کند . این 12 بایت ابتدا 4 بایت ان برای (timestamp) ،سه بایت بعدی برای شناسه ماشین (machine id) ، دو بایت بعدی برای شناسه پروسس (process id ) مونگودبی و 3 بایت باقی مانده اخر برای مقدار افزایشی (simple incremental VALUE) می باشد




MongoDB - Advantages

هر پایگاه داده رابطه ای معمولا داری یه اسکیمای می باشد که شامل جداول و ارتباط بین این جداول را نشان می دهد در حالی که در مونگودبی (MongoDB) ،مفهومی از رابطه وجود ندارد

Advantages of MongoDB over RDBMS

  • عدم نیاز به اسکیمای ثابت

مونگودبی در حقیقت یک پایگاه داده بر پایه اسناد می باشد که در آن یک کالکشن می تواند مستندات مختلفی در خود نگهداری کند. تعداد فیلدها ،محتوا و اندازه سند می تواند از سندی به سند دیگر متفاوت باشد.

  • ساختار هر ابجکت در مانگودبی واحد و واضح می باشد
  • رابطه های پیچیده بین جداول در مانگودبی وجود ندارد
  • قابلیت پرس و جوی عمیق

مونگودبی با استفاده از یک زبان پرس و جوی مبتنی بر اسناد که تقریبا به اندازه SQL قوی است ,از کوری های پویا پشتیبانی می کند

  • قابلیت تیونیگ
  • قابلیت مقیاس پذیری راحت

مقیاس بندی در مونگودبی خیلی راحت است

  • تبدیل و نگاشت ابجکت های کاربردی به ابجکت های دیتابیس در مونگودبی مورد نیاز نیست
  • از حافظه داخلی بعنوان حافظه کاری برای نگهداری داده ها استفاده می کند که این امر دسترسی سریع به داده ها در مونگودبی را فراهم می کند

Why Use MongoDB?

  • ویژگی Document Oriented Storage

داده برای اساس فرمت json ذخیره می شود

  • هر صفت و خصوصیت از داده ها قابلیت ایندکس شدن را دارد
  • ویژگی Replication and high availability

همسان سازی اتوماتیک داده ها و بالاترین سطح در دسترس بودن داده ها را پشتیبانی می کند

  • حالت Auto-Sharding

که امکان مقایس پذیری افقی automation of horizontal scaling به مونگودبی می دهد

  • پرس و جوها غنی شده
  • ویژگی Fast in-place updates

یکی از ویژگی های خوب MongoDB این است که به روزرسانی ها می توانند "در محل" اتفاق بیفتند - پایگاه داده نیازی به اختصاص و نوشتن یک نسخه کامل جدید از آبجکت را ندارد.

  • پشتیبانی حرفه ای از توسط تیم مونگودبی

Where to Use MongoDB

  • در بیگ دیتا
  • در سیستم های مدیریت محتوا
  • در سیستم های موبایل و زیر ساخت های شبکه های اجتماعی
  • در سیستم های مدیریت داده های کاربری
  • دیتاهاب ها

به مجموعه از داده ها از منابع متعدد که برای توزیع ,اشتراک گذاری سازماندهی شده باشد دیتاهاب گفته می شود




MongoDB - Environment

اجازه دهید نحوه نصب MongoDB را در ویندوز ببینیم.

Install MongoDB On Windows

برای نصب MongoDB بر روی ویندوز ، ابتدا آخرین نسخه MongoDB را دانلود کنید

https://www.mongodb.com/try/download/community


جزئیات مورد نیاز را وارد کنید ، برگه Server را انتخاب کنید ، در آن می توانید نسخه MongoDB ، سیستم عامل و بسته بندی را به صورت زیر انتخاب کنید:(پیشنهاد می شود نسخه کامیونیتی برای شروع یادگیری انتخاب شود)

اکنون فایل دانلود شده را نصب کنید ، به طور پیش فرض ، در پوشه زیر نصب می شود

C:\Program Files\.

نکته
در مراحل نصب با عنایت به اینکه شروع به دانلود MongoDB Compass می کند و از سوی در حدود 160 مگابایت فایل باید دانلود کند و از طرف دیگر این سایت در ایران فیلتر می باشد در حین نصب می بایستی فیلتر شکن فعال باشد و اگر نتوانست در حین مراحل نصب MongoDB Compass دانلود و نصب کند می توانید بصورت دستی ابتدا خودتان از مسیر ذیل این فایل را دانلود و نصب کنید و سپس مراحل نصب سرور کامیونیتی مونگودبی را دوباره انجام دهید و در مراحل نصب تیک MongoDB Compass را بردارید
نکته
برای اینکه برنامه MongoDB Compass کار کند حتما می بایستی بر روی سیستم عامل خودتان Java SE Development Kit نصب شده باشد اگر نصب نیست می توانید از طریق سایت های ایرانی دانلود و نصب کنید

نمایی از برنامه MongoDB Compass را مشاهده می کنید:

MongoDB نمایی از برنامه
MongoDB نمایی از برنامه

مونگودبی برای ذخیره فایل های خود یک پوشه نیاز دارد مسیر پیش فرض برای ذخیره داده در سیستم عامل های ویندوز C:\data\db می باشد . بنابراین باید این پوشه را با استفاده Command Prompt ایجاد کنیم برای این کار دستورات زیر را در ترمینال وارد می کنیم:

C:\>md data C:\md data\db

سپس باید تنظیم dbpath را در فهرست ایجاد شده در فایل mongod.exe را می بایستی تعیین کنید. برای همین ، دستورات زیر را صادر کنید

C:\Users\XYZ>d:cd C:\Program Files\MongoDB\Server\4.2\bin C:\Program Files\MongoDB\Server\4.2\bin>mongod.exe --dbpath &quotC:\data&quot

این پیام منتظر اتصالات را در خروجی کنسول نشان می دهد و روند mongod.exe با موفقیت اجرا می شود. اکنون برای اجرای MongoDB ، باید خط فرمان دیگری را باز کرده و دستور زیر را صادر کنید.

C:\Program Files\MongoDB\Server\4.2\bin>mongo.exe MongoDB shell version v4.2.1 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { &quotid&quot : UUID(&quot4260beda-f662-4cbe-9bc7-5c1f2242663c&quot) } MongoDB server version: 4.2.1 >

این نشان می دهد که MongoDB با موفقیت نصب شده و اجرا می شود. دفعه بعد که MongoDB را اجرا می کنید ، فقط باید دستورات را صادر کنید

C:\Program Files\MongoDB\Server\4.2\bin>mongod.exe --dbpath &quotC:\data&quot C:\Program Files\MongoDB\Server\4.2\bin>mongo.exe

پیشنهاد می شود برای سهولت دسترسی به فایل اجرایی پایگاه داده مونگودبی از متغییر محلی ویندوز به متغییر path مسیر دسترسی به پایگاه داده مانگودبی اضافه شود

C:\Program Files\MongoDB\Server\4.4\bin


MongoDB Help

برای دریافت لیستی از دستورات ، db.help () را در کلاینت MongoDB تایپ کنید. با این کار لیستی از دستورات به شما نشان داده می شود که در تصویر زیر نشان داده شده است.

MongoDB Statistics

برای دریافت آمار در مورد سرور MongoDB ، دستور ()db.stats را در سرویس گیرنده MongoDB تایپ کنید. این نام پایگاه داده ، تعداد مجموعه و اسناد موجود در پایگاه داده را نشان می دهد. خروجی فرمان در تصویر زیر نشان داده شده است.

https://www.aparat.com/javadjahangiriniopdc/playlists




MongoDB - Data Modelling

داده های موجود در MongoDB دارای اسکیمای انعطاف پذیر است. اسناد موجود در یک کالکشن نیازی به مجموعه ای مشابه از فیلدها یا ساختار را ندارند ، فیلدهای معمولی در اسناد یک کالکشن ممکن است انواع مختلفی از داده ها را در خود جای دهند.

Data Model Design

مونگودبی دو نوع مدل داده را ارائه می دهند:مدل Embedded و مدل داده Normalized بر اساس الزامات ,هنگام تهیه سند خود می توانید از هر یک از مدل ها استفاده کنید

Embedded Data Model

در این مدل ، می توانید تمام داده های مرتبط را در یک سند واحد (embed) کنید ، همچنین به عنوان مدل داده غیر عادی (de-normalized) شناخته می شود

به عنوان مثال ، فرض کنید که ما اطلاعات کارکنان را در سه سند مختلف یعنی Personal_details ، Contact و Address دریافت می کنیم ، می توانید هر سه سند را در یک سند جاسازی کنید ، همانطور که در زیر نشان داده شده است :

{ _id: , Emp_ID: &quot10025AE336&quot Personal_details:{ First_Name: &quotRadhika&quot, Last_Name: &quotSharma&quot, Date_Of_Birth: &quot1995-09-26&quot }, Contact: { e-mail: &quotradhika_sharma.123@gmail.com&quot, phone: &quot9848022338&quot }, Address: { city: &quotHyderabad&quot, Area: &quotMadapur&quot, State: &quotTelangana&quot } }

Normalized Data Model

در این مدل ، می توانید اسناد فرعی را در سند اصلی با استفاده از منابع ارجاع دهید. به عنوان مثال ، می توانید سند فوق را در مدل نرمال شده دوباره بنویسید:

Employee:

{ _id: <ObjectId101>, Emp_ID: &quot10025AE336&quot }

Personal_details:

{ _id: <ObjectId102>, empDocID: &quot ObjectId101&quot, First_Name: &quotRadhika&quot, Last_Name: &quotSharma&quot, Date_Of_Birth: &quot1995-09-26&quot }

Contact:

{ _id: <ObjectId103>, empDocID: &quot ObjectId101&quot, e-mail: &quotradhika_sharma.123@gmail.com&quot, phone: &quot9848022338&quot }

Address:

{ _id: <ObjectId104>, empDocID: &quot ObjectId101&quot, city: &quotHyderabad&quot, Area: &quotMadapur&quot, State: &quotTelangana&quot }

نکاتی در هنگام طراحی Schema در MongoDB

  • اسکیمای خود را با توجه به نیازهای کاربر طراحی کنید.
  • اگر اشیاء را با هم استفاده کنید ، آنها را در یک سند ترکیب کنید. در غیر این صورت آنها را جدا کنید (اما مطمئن شوید که نیازی به پیوستن نیست)
  • داده ها را کپی کنید (اما محدود) زیرا فضای دیسک در مقایسه با زمان محاسبه ارزان است
  • هنگام نوشتن Join کنید ، نه هنگام خواندن
  • اسکیمای خود را برای اغلب موارد استفاده بهینه کنید
  • از تجمیع های پیچیده در اسکیمای خود استفاده کنید

Example

فرض کنید یک مشتری برای وبلاگ خود به طراحی پایگاه داده نیاز دارد:

  • هر پست عنوان ، توضیحات و آدرس اینترنتی منحصر به فردی دارد.
  • هر پست می تواند یک یا چند برچسب داشته باشد
  • هر پست نام ناشر و تعداد کل لایک ها را دارد
  • هر پست دارای نظراتی است که کاربران به همراه نام ، پیام ، زمان داده و لایک آنها ارائه می دهند
  • در هر پست ، می تواند صفر یا بیشتر نظرات داشته باشد

در اسکیمای RDBMS ، طراحی برای الزامات فوق حداقل سه جدول خواهد داشت.

در حالی که در اسکیمایMongoDB ، ما یک کالکشن (collection) پست (post) با ساختار زیر خواهد بود:

{ _id: POST_ID title: TITLE_OF_POST, description: POST_DESCRIPTION, by: POST_BY, url: URL_OF_POST, tags: [TAG1, TAG2, TAG3], likes: TOTAL_LIKES, comments: [ { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES }, { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES } ] }

بنابراین هنگام نمایش داده ها ، در RDBMS شما باید به سه جدول بپیوندید و در MongoDB ، داده ها فقط از یک کالکشن (collection) نشان داده می شوند.

https://www.aparat.com/javadjahangiriniopdc/playlists




MongoDB - Create Database

در این فصل نحوه ایجاد پایگاه داده در MongoDB را خواهیم دید.

The use Command

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

Syntax

شکل دستوری استفاده از دستور use DATABASE به شرح زیر است:

use DATABASE_NAME

Example

اگر می خواهید از پایگاه داده ای با نام <mydb> استفاده کنید ، عبارت DATABASE به شرح زیر است:

>use mydb switched to db mydb

برای بررسی پایگاه داده انتخاب شده خود ، از دستور db استفاده کنید:

>db mydb

اگر می خواهید لیست پایگاه های داده خود را بررسی کنید ، از دستور show dbs استفاده کنید:

>show dbs local 0.78125GB test 0.23012GB

پایگاه داده ایجاد شده شما (mydb) در لیست موجود نیست. برای نمایش پایگاه داده ، باید حداقل یک سند را در آن وارد کنید.

>db.movie.insert({&quotname&quot:&quottutorials point&quot}) >show dbs local 0.78125GB mydb 0.23012GB test 0.23012GB

در پایگاه داده MongoDB دیتابیس پیش فرض test می باشد. اگر هیچ پایگاه داده ای ایجاد نکرده اید ، collections ها در پایگاه داده test ذخیره می شوند.

MongoDB - Drop Database

در این فصل نحوه drop کردن پایگاه داده با استفاده از فرمان MongoDB را خواهیم دید.

The dropDatabase() Method

دستور ()db.dropDatabase برای حذف کردن پایگاه داده موجود استفاده می شود.

Syntax

شکل دستوری ()dropDatabase به شرح زیر است:

db.dropDatabase()

با این کار پایگاه داده انتخاب شده حذف می شود. اگر هیچ پایگاه داده ای را انتخاب نکرده اید ، پایگاه داده پیش فرض "test" را حذف می کند.

Example

>show dbs local 0.78125GB mydb 0.23012GB test 0.23012GB >

اگر می خواهید پایگاه داده جدید <mydb> را حذف کنید ، دستور ()dropDatabase به شرح زیر است:

>use mydb switched to db mydb >db.dropDatabase() >{ &quotdropped&quot : &quotmydb&quot, &quotok&quot : 1 } >

اکنون لیست پایگاه های داده را بررسی کنید.

>show dbs local 0.78125GB test 0.23012GB >



MongoDB - Create Collection

در این فصل نحوه ایجاد Collection با استفاده از MongoDB را خواهیم دید.

The createCollection() Method

MongoDB db.createCollection(name, options) is used to create collection.

Syntax

db.createCollection(name, options)

در این دستور ، name نام کالکشن است که باید ایجاد شود. Options یک سند است و برای تعیین پیکربندی کالکشن ها مورد استفاده قرار می گیرد

پارامتر Options اختیاری است ، بنابراین باید فقط نام کالکشن را مشخص کنید. در زیر لیستی از گزینه هایی است که می توانید استفاده کنید:

هنگام درج سند ، MongoDB ابتدا فیلد اندازه capped collection را بررسی می کند ، سپس max field را بررسی می کند.

Examples

شکل دستوری روش ()createCollection بدون options به شرح زیر است -

>use test switched to db test >db.createCollection(&quotmycollection&quot) { &quotok&quot : 1 } >

با استفاده از دستور show collections می توانید کالکشن ایجاد شده را بررسی کنید:

>show collections mycollection system.indexes

مثال زیر نحو متد ()createCollection را با چند گزینه مهم نشان می دهد -

> db.createCollection(&quotmycol&quot, { capped : true, autoIndexID : true, size : 6142800, max : 10000 } ){ &quotok&quot : 0, &quoterrmsg&quot : &quotBSON field 'create.autoIndexID' is an unknown field.&quot, &quotcode&quot : 40415, &quotcodeName&quot : &quotLocation40415&quot } >

در MongoDB ، نیازی به ایجاد کالکشن ندارید. هنگام وارد کردن سند ، MongoDB به طور خودکار مجموعه ایجاد می کند

>db.tutorialspoint.insert({&quotname&quot : &quottutorialspoint&quot}) WriteResult({ &quotnInserted&quot : 1 }) >show collections mycol mycollection system.indexes tutorialspoint >

در مثال بالا توجه کنید db.tutorialspoint.insert اسم کالکشن که باید ایجاد شود tutorialspoint می باشد که شامل سندی است که در ان فیلد name با مقدار tutorialspoint می باشد




MongoDB - Drop Collection

استفاده از متد ()drop در MongoDB :

دستور ()db.collection.drop در MongoDB  برای حذف یک مجموعه از پایگاه داده استفاده می شود.

یک مجموعه یا نمایش را از پایگاه داده حذف می کند.

این متد همچنین هر شاخصی را که مربوط به مجموعه پاک شده است را نیز حذف می کند.

سینتکس

دستورالعمل پایه دستور() drop در MongoDB به شرح زیر است:

1

db.COLLECTION_NAME.drop()

مثال

ابتدا باید، مجموعه های موجود را در پایگاه داده mydb بررسی کنید.دستور آن به شکل زیر است :

>use mydb switched to db mydb >show collections mycol mycollection system.indexes tutorialspoint
>

سپس مجموعه mycollection را حذف نمایید:

>db.mycollection.drop() true >

مجددا لیستی از مجموعه ها را در پایگاه داده چک کنید.

>show collections mycol system.indexes tutorialspoint >

اگر مجموعه انتخاب شده با موفقیت حذف شود، متد ()drop  مقدار درست را بازگرداند، در غیر اینصورت، مقدار غلط برگشت داده خواهد شد.

این روش بر قفل نوشتن بر روی پایگاه داده آسیب می زند و دیگر عملیات نوشتن را تا زمانی که تمام نشده است، مسدود کند.

حذف و ایجاد مجموعه در MongoDB از اعمال پر کاربرد در این پایگاه داده می باشد.امیدوارم از مطالب مذکور بهره کافی را برده باشید با ما همراه باشید تا در جلسه بعد انواع داده ها را در MongoDB بشناسید.



MongoDB - Datatypes

به طور کلی داده هایی که در MongoDB می توانید وارد کنید شامل انواع زیر می شوند:

  • داده متنی
  • داده عددی
  • داده تاریخ و زمان

MongoDB از بسیاری از انواع داده پشتیبانی می کند. برخی از آنها در زیر لیست شده اند :

String : این نوع داده معمولی است که برای ذخیره داده ها استفاده می شود. رشته در MongoDB باید توسط UTF-8 معتبر باشد.

Integer : این نوع برای ذخیره یک مقدار عددی استفاده می شود. Integer می تواند ۳۲ بیتی یا ۶۴ بیتی بسته به سرور شما باشد.

Boolean : این نوع برای ذخیره یک مقدار (true / false) استفاده می شود.

Double : این نوع برای ذخیره مقادیر شناور و اعشاری استفاده می شود.

Min/ Max keys : این نوع برای مقایسه مقادیر علیه کمترین و بالاترین عناصر BSON استفاده می شود.

Arrays : این نوع برای ذخیره آرایه ها یا لیست ها یا مقادیر متعدد در یک کلید استفاده می شود.

Timestamp-ctimestamp : می تواند برای ضبط هنگامی که یک سند اصلاح شده یا اضافه شده است مفید باشد.

Object : این نوع داده برای اسناد جاسازی شده استفاده می شود.

Null : این نوع برای ذخیره یک مقدار Null استفاده می شود.

Symbol : این نوع داده با یک رشته به طور یکسان استفاده می شود. با این حال، به طور کلی برای زبان هایی که از یک نوع نماد خاص استفاده می کنند، استفاده می شود.

date : این نوع داده برای ذخیره تاریخ یا زمان فعلی در فرمت زمان بندی یونیکس استفاده می شود. شما می توانید زمان تاریخ خود را با ایجاد شیء تاریخ و گذراندن روز، ماه، سال به آن مشخص کنید.

Object ID : این نوع داده برای ذخیره شناسه سند استفاده می شود.

داده باینری : این نوع داده برای ذخیره اطلاعات باینری استفاده می شود.

Code : این نوع داده برای ذخیره ی جاوا اسکریپت در سند استفاده می شود.

عبارت Regular : این نوع داده برای ذخیره عبارات منظم استفاده می شود.

۱۵ نوع از انواع داده های MongoDB که در این پایگاه داده پشتیبانی می شدند را نام بردیم. درج سند در MongoDB آموزش بعدی ما خواهد بود،با ما همراه باشید.



MongoDB - Insert Document

در این فصل، ما نحوه قرار دادن سند در مجموعه MongoDB یاد می گیریم.

برای ساخت سند باید از دستور insert استفاده شود:

برای قرار دادن داده ها در مجموعه MongoDB، شما باید از ()insert یا ()save در MongoDB استفاده کنید.

سینتکس

دستورالعمل اولیه دستور ()insert به شرح زیر است:

db.COLLECTION_NAME.insert(document) >db.mycol.insert({ _id: ObjectId(7df78ad8902c), title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })

در اینجا mycol نام مجموعه ما است، همانطور که در فصل قبل ایجاد کردیم. اگر مجموعه موجود در پایگاه داده وجود نداشته باشد، MongoDB این مجموعه را ایجاد می کند و سپس یک سند را وارد آن می کند.

در سند وارد شده، اگر id parameter_ را مشخص نکنیم،مانگو  ObjectId منحصر به فرد را برای این سند اختصاص می دهد.

id _ از ۱۲ بایت  هگزادسیمال منحصر به فرد برای هر سند در یک مجموعه استفاده می کند.

۱۲ بایت به صورت زیر تقسیم می شوند:

مثال:

_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)

برای قرار دادن اسناد متعدد در یک کوئری تنها می توانید یک آرایه ای از اسناد را در دستور insert () منتقل کنید.

>db.post.insert([ { title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { title: 'NoSQL Database', description: &quotNoSQL database doesn't have tables&quot, by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 20, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2013,11,10,2,35), like: 0 } ] } ])

در نسخه جدید ۳٫۲ وارد کردن اسناد چندگانه در MongoDB نیز افزوده شده…

با دستور ()db.collection.insertMany  می توانید چندین اسناد را در مجموعه قرار دهید. و بدی صورت آرایه ای از مدارک را با این روش انتقال دهید.

برای وارد کردن سند می توانید از(سند) db.post.save نیز استفاده کنید. اگر _id را در سند مشخص نکنید، روش () Save  همانند روش () insert کار خواهد کرد.



MongoDB - Query Document

استفاده از متد ()find  :
برای پرس و جو داده ها از مجموعه MongoDB، شما باید از متد () find  در MongoDB استفاده کنید.

سینتکس اصلی متد ()find به شرح زیر است:

>db.COLLECTION_NAME.find()

متد ()pretty

برای نمایش نتایج در قالب فرمت شده، شما می توانید از متد ()pretty با سینتکس زیر استفاده کنید :

>db.mycol.find().pretty()

مثال

>db.mycol.find().pretty()

{ &quot_id&quot: ObjectId(7df78ad8902c), &quottitle&quot: &quotMongoDB Overview&quot, &quotdescription&quot: &quotMongoDB is no sql database&quot, &quotby&quot: &quottutorials point&quot, &quoturl&quot: &quothttp://www.tutorialspoint.com&quot, &quottags&quot: [&quotmongodb&quot, &quotdatabase&quot, &quotNoSQL&quot], &quotlikes&quot: &quot100&quot } >

به غیر از متد ()find ، متد ()findOne نیز وجود دارد که تنها یک سند را باز می گرداند.

برای کوئری سند بر اساس برخی شرایط، می توانید از عملیات زیر استفاده کنید.



AND در MongoDB

در متد  () find اگر کلید های چندگانه را توسط علامت ‘,’ از هم جدا کنید، در MongoDB مشابه عملگر AND عمل میکند.

مثال :

>db.mycol.find( { $and: [ {key1: value1}, {key2:value2} ] } ).pretty()

OR در MongoDB

برای کوئری  مدارک بر اساس شرایط OR، شما باید از کلمه کلیدی OR$  استفاده کنید.در مثال زیر سینتکس  OR نشان داده شده است :

>db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()

مثال زیر همه آموزش هایی که توسط ‘tutorials point’ نوشته شده یا عنوان آن ‘MongoDB Overview’ را نشان می دهد.

>db.mycol.find({$or:[{&quotby&quot:&quottutorials point&quot},{&quottitle&quot: &quotMongoDB Overview&quot}]}).pretty() { &quot_id&quot: ObjectId(7df78ad8902c), &quottitle&quot: &quotMongoDB Overview&quot, &quotdescription&quot: &quotMongoDB is no sql database&quot, &quotby&quot: &quottutorials point&quot, &quoturl&quot: &quothttp://www.tutorialspoint.com&quot, &quottags&quot: [&quotmongodb&quot, &quotdatabase&quot, &quotNoSQL&quot], &quotlikes&quot: &quot100&quot } >

استفاده از AND و OR با هم

مثال زیر اسنادی را به ما نشان می دهد که مقدار likes بالاتر از ۱۰ است و عنوان آنها ‘MongoDB Overview’ یا ‘tutorials point’ می باشد.

‘where likes>10 AND (by = ‘tutorials point’ OR title = ‘MongoDB Overview’)’سینتکس در SQL

>db.mycol.find({&quotlikes&quot: {$gt:10}, $or: [{&quotby&quot: &quottutorials point&quot}, {&quottitle&quot: &quotMongoDB Overview&quot}]}).pretty() { &quot_id&quot: ObjectId(7df78ad8902c), &quottitle&quot: &quotMongoDB Overview&quot, &quotdescription&quot: &quotMongoDB is no sql database&quot, &quotby&quot: &quottutorials point&quot, &quoturl&quot: &quothttp://www.tutorialspoint.com&quot, &quottags&quot: [&quotmongodb&quot, &quotdatabase&quot, &quotNoSQL&quot], &quotlikes&quot: &quot100&quot } >

توجه داشته باشید متد ()find تمام اسناد را به صورت غیر ساختاری نمایش می دهد و برای نمایش نتایج در قالب فرمت شده، شما باید از متد ()pretty استفاده نمایید.



MongoDB - Update Document

تدهای ()update  و ()save  در MongoDB برای به روز رسانی سند در یک مجموعه استفاده می شود.

متد ()update  مقادیر موجود در سند موجود را بروز رسانی می کند در حالی که متد ()Save  جایگزین سند موجود با سند منتقل شده در روش ()save  می شود.

متد ()Update در MongoDB

متد ()update مقادیر موجود در سندهای موجود را بروز رسانی می کند.

سینتکس

سینکس اصلی متد ()update به صورت زیر است :

>db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

مثال
فرض کنید مجموعه mycol دارای داده های زیر است.

{ &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotMongoDB Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot}

مثال زیر تایتل جدید سندها را با عنوان ‘New MongoDB Tutorial’ برای سندهایی که تایتل آنها ‘MongoDB Overview’ است تنظیم می کند.

>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}}) WriteResult({ &quotnMatched&quot : 1, &quotnUpserted&quot : 0, &quotnModified&quot : 1 }) >db.mycol.find() { &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotNew MongoDB Tutorial&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot} >

به طور پیش فرض، MongoDB فقط یک سند تک  را بروز رسانی می کند. برای بروز رسانی چندین اسناد، شما باید پارامتر ‘multi’ را به درست تنظیم کنید.


>db.mycol.update({'title':'MongoDB Overview'}, {$set:{'title':'New MongoDB Tutorial'}},{multi:true})

متد ()save در MongoDB

متد ()save  سند موجود را با سند جدیدی که در روش ()save منتقل شده است جایگزین می کند.

سینتکس

سینتکس اصلی متد ()save در MongoDB در زیر نشان داده شده است :

>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})

مثال
در مثال زیر سند با آیدی_ ‘۵۹۸۳۵۴۸۷۸۱۳۳۱adf45ec5 جایگزین خواهد شد.

>db.mycol.save( { &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotTutorials Point New Topic&quot, &quotby&quot:&quotTutorials Point&quot } ) >db.mycol.find() { &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotTutorials Point New Topic&quot, &quotby&quot:&quotTutorials Point&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot} >

بروز رسانی سند در MongoDB توسط متدهای ()update  و ()save صورت می پذیرد.ولی هرکدام ازین متدها نیز برای کاربرد خاصی استفاده می شوند.امیدوارم از مطالب ذکر شده بهره کافی را برده باشید.در جلسه بعدی حذف سند در MongoDB آموزش داده خواهد شد.



MongoDB - Delete Document

همانطور که گفته شد متد ()remove در MongoDB برای حذف یک سند از مجموعه استفاده می شود. این متد دو پارامتر را می پذیرد.

یکی از آن ها معیارهای حذف است و دومی  پرچم justOne است.

معیار حذف (اختیاری) :  معیارهای حذف با توجه به اسناد حذف خواهند شد.

justOne (اختیاری) : اگر مقدار درست یا ۱ تنظیم شود،تنها یک سند را حذف کنید.

سینتکس
سینتکس اصلی متد ()remove به شرح زیر می باشد :

>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

فرض کنید مجموعه mycol دارای داده های زیر است.

{ &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotMongoDB Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot}

مثال زیر تمام اسنادهایی را که عنوان آن ها “Overview MongoDB” است حذف می کند.

>db.mycol.remove({'title':'MongoDB Overview'}) >db.mycol.find() { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot} >

حذف تکی

اگر چندین رکورد وجود داشته باشد و شما بخواهید اولین رکورد را حذف نمایید،باید پارامتر justOne را در متد ()remove تنظیم کنید.

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

حذف تمام اسناد

اگر معیارهای حذف را مشخص نکنید، MongoDB تمام مدارک را از مجموعه حذف خواهد کرد. و معادل دستور فرمان SQL است.

>db.mycol.remove() >db.mycol.find() >



MongoDB - Projection

در MongoDB، طرح ریزی به معنی انتخاب اطلاعات لازم است تا انتخاب کل داده های یک سند.

یعنی اگر یک سند دارای ۵ فیلد باشد و شما بخواهید تنها همان ۳ را فیلد را نمایش دهید، پس بتوانید فقط ۳ فیلد را از آنها انتخاب کنید.

متد ()find

متد ()find در  MongoDB قبلا توضیح داده شده و برای پرس و جو استفاده می شود.

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

در MongoDB، هنگام اجرای متد ()find، تمام فیلدهای یک سند نمایش داده می شود.

برای محدود کردن آن، شما نیاز به تنظیم یک لیست از فیلدها با مقدار ۱ یا ۰٫ ۱ برای نشان دادن فیلد استفاده می شود در حالی که ۰ برای مخفی کردن فیلدها استفاده می شود.

سینتکس پایه متد ()find برای طرح ریزی به شرح زیر است:

>db.COLLECTION_NAME.find({},{KEY:1})

فرض کنید مجموعه mycol دارای داده های زیر است :

{ &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotMongoDB Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot}

مثال زیر، عنوان سند را هنگام جستجو در سند نمایش می دهد.

>db.mycol.find({},{&quottitle&quot:1,_id:0}) {&quottitle&quot:&quotMongoDB Overview&quot} {&quottitle&quot:&quotNoSQL Overview&quot} {&quottitle&quot:&quotTutorials Point Overview&quot} >
نکته
در هنگام اجرای متد ()find ، فیلد _id همیشه نمایش داده شود، اگر شما این فیلد را نمی خواهید، باید آن را ۰ قرار دهید.

پرس و جو در MongoDB توسط متد ()find صورت می گیرد.در MongoDB، هنگامی که یک مجموعه را با استفاده از متد ()db.collection.find  جستجو می کنید، می توانید مشخص کنید کدام فیلدها را که می خواهید برگردانید.همچنین شما می توانید این کار را با وارد کردن نام فیلد در پرس و جو و اضافه کردن ۱ یا ۰ در کنار آن انجام دهید تا مشخص شود آیا باید آن را بازگردانده شود یا خیر.



MongoDB - Limit Records

متد ()Limit

برای محدود کردن رکوردها در MongoDB، شما باید از متد ()Limit  استفاده کنید. این متد یک آرگومان از نوع عددی را می پذیرد، که نشان دهنده تعداد اسنادی است که می خواهید نمایش داده شوند.

سینتکس پایه برای متد ()Limit به صورت زیر می باشد:

>db.COLLECTION_NAME.find().limit(NUMBER)

فرض کنید مجموعه myycol دارای داده های زیر است.

{ &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotMongoDB Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot}

در مثال زیر، هنگام جستجو در سند، تنها دو سند نمایش داده خواهد شد.

>db.mycol.find({},{&quottitle&quot:1,_id:0}).limit(2) {&quottitle&quot:&quotMongoDB Overview&quot} {&quottitle&quot:&quotNoSQL Overview&quot} >

گر شماره آرگومان را در متد ()Limit مشخص نکنید، تمام اسنادمجموعه نمایش داده می شود.

متد ()skip

به غیر از متد ()Limit، یک متد دیگر ()skip وجود دارد که  آرگومان از نوع عددی را می پذیرد و برای تعداد اسناد استفاده می شود.

سینتکس این متد به صورت زیر می باشد :

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

مثال
در مثال زیر تنها دومین سند نمایش داده می شود.

>db.mycol.find({},{&quottitle&quot:1,_id:0}).limit(1).skip(1) {&quottitle&quot:&quotNoSQL Overview&quot} >

توجه داشته باشید، مقدار پیش فرض در متد ()skip صفر  است.هنگامی که ما یک مجموعه را فراخوانی می کنیم، همه اسناد موجود در آن را نمایش داده می شود. محدودیت برای بازیابی تعداد اسنادی است که ما نیاز داریم از آنها استفاده کنیم. ما می توانیم از متد limit در MongoDB  برای مشخص کردن تعداد اسنادی که می خواهیم آن را بازگردانیم استفاده کنیم.محدودیت رکورد ها در MongoDB توسط توسط متدهای  ()Limit  و ()skip به پایان رسید در جلسه بعدی مرتب سازی رکورد ها در در MongoDB را آموزش خواهیم داد



MongoDB - Sort Records

استفاده از متد ()sort

برای مرتب کردن اسناد در MongoDB، شما باید از متد ()sort استفاده کنید. این متد یک سند حاوی لیستی از فیلدها همراه با دستور مرتب سازی آنها را می پذیرد. برای مشخص کردن مرتبه مرتب سازی ۱ و -۱ استفاده می شود. ۱ به منظور مرتب سازی صعودی استفاده می شود در حالی که ۱- برای ترتیب نزولی استفاده می شود.

هنگام مقایسه مقادیر انواع مختلف BSON،در  MongoDB از ترتیب مقایسه زیر استفاده می شود( از کمترین به بالاترین):

MinKey (نوع داخلی)
Null
اعداد
نماد، رشته
هدف – شی
آرایه
BinData
ObjectId
بولین
تاریخ
Timestamp
عبارت منظم
MaxKey (نوع داخلی)

سینتکس

فرم اولیه sort بصورت زیر است :

{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }

سینتکس متد ()sort در MongoDB به شرح زیر است :

>db.COLLECTION_NAME.find().sort({KEY:1})

مثال

فرض کنید مجموعه myycol دارای داده های زیر است.

{ &quot_id&quot : ObjectId(5983548781331adf45ec5), &quottitle&quot:&quotMongoDB Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec6), &quottitle&quot:&quotNoSQL Overview&quot} { &quot_id&quot : ObjectId(5983548781331adf45ec7), &quottitle&quot:&quotTutorials Point Overview&quot}

مثال زیر اسناد مرتب شده بر اساس عنوان(title) را در ترتیب نزولی به شما نشان می دهد.

>db.mycol.find({},{&quottitle&quot:1,_id:0}).sort({&quottitle&quot:-1}) {&quottitle&quot:&quotTutorials Point Overview&quot} {&quottitle&quot:&quotNoSQL Overview&quot} {&quottitle&quot:&quotMongoDB Overview&quot} >

لطفا توجه داشته باشید اگر ترتیب صعودی یا نزولی بودن را مشخص نکنید، درنتیجه متد ()sort در MongoDB اسناد را به ترتیب صعودی نمایش می دهد.با ما همراه باشید تا در جلسه بعد فهرست کردن در MongoDB را فرا بگیرید.



MongoDB - Indexing

ایندکس‌ها در MongoDB تاثیر بسیاری در اجرای کوئری‌ها دارند.بدون ایندکس‌ها، MongoDB باید تمام سندهای یک مجموعه را برای انتخاب سندهایی که با عبارت کوئری مطابقت دارند، اسکن کند.این اسکن بسیار ناکارآمد است و در این حالت mongoDB به پردازش حجم بزرگی از داده‌ها نیاز دارد.

متد ()createIndex

برای ساخت ایندکس‌ها در MongoDB باید از متد ()createIndexاستفاده کنید.

سینتکس

سینتکس پایه متد ()createIndex به شکل زیر است:

>db.COLLECTION_NAME.createIndex({KEY:1})

در اینجا، key نام فیلدی است که می‌خواهید بر روی آن ایندکس بسازید و مقدار ۱ برای مرتب سازی بصورت صعودی است.

برای ساخت ایندکس‌ها در MongoDB با مرتب سازی نزولی باید از مقدار ۱- استفاده کنید.

مثال:

>db.mycol.createIndex({&quottitle&quot:1}) { &quotcreatedCollectionAutomatically&quot : false, &quotnumIndexesBefore&quot : 1, &quotnumIndexesAfter&quot : 2, &quotok&quot : 1 } >

در متد ()createIndex برای ساخت ایندکس بر روی چندین فیلد، می‌توانید چندین فیلد را به آن پاس دهید:

>db.mycol.createIndex({&quottitle&quot:1,&quotdescription&quot:-1}) >

متد ()createIndex لیستی از گزینه ها را قبول می‌کند که در زیر آمده‌اند:

همانطور که گفته شد Indexing در MongoDB بخش کوچکی از مجموعه داده‌ها را به شکل ساده‌ای برای پیمایش، ذخیره می‌کنند.امیدوارم از مطالب ذکر شده بهره کافی را برده باشید با ما همراه باشید تا در جلسه بعد، توابع جمعی در MongoDB را آموزش ببینید.

The dropIndex() متد

شما می توانید با استفاده از روش dropIndex() یک شاخص خاص را حذف کنید.

سینتکس

سینتکس متد DropIndex به شرح ذیل می باشد:

>db.COLLECTION_NAME.dropIndex({KEY:1})

در اینجا کلید نام فایلی است که می خواهید ایندکس را روی آن ایجاد کنید و 1 برای ترتیب صعودی است. برای ایجاد ایندکس به ترتیب نزولی باید از -1 استفاده کنید.

مثال:

> db.mycol.dropIndex({&quottitle&quot:1}) { &quotok&quot : 0, &quoterrmsg&quot : &quotcan't find index with key: { title: 1.0 }&quot, &quotcode&quot : 27, &quotcodeName&quot : &quotIndexNotFound&quot }

The dropIndexes() method

نحو اصلی متد DropIndexes() به صورت زیر است:

>db.COLLECTION_NAME.dropIndexes()

مثال:

فرض کنید ما 2 شاخص در مجموعه mycol نامگذاری شده مانند شکل زیر ایجاد کرده ایم:

> db.mycol.createIndex({&quottitle&quot:1,&quotdescription&quot:-1})

مثال زیر ایندکس های ایجاد شده در بالا از mycol را حذف می کند:

>db.mycol.dropIndexes({&quottitle&quot:1,&quotdescription&quot:-1}) { &quotnIndexesWas&quot : 2, &quotok&quot : 1 } >

The getIndexes() method

این متد توضیحات تمامی ایندکس موجود در یک کالکشن را نمایش می دهد:

db.COLLECTION_NAME.getIndexes()

مثال

در پایین ما دو تا ایندکس در کالکشن mycol به شرح ذیل ایجاد می کنیم :

db.mycol.createIndex({&quottitle&quot:1,&quotdescription&quot:-1})

از طریق دستور زیر می توانیم همه ایندکس موجود در کالکشن mycol را نمایش داد:

> db.mycol.getIndexes() [ { &quotv&quot : 2, &quotkey&quot : { &quot_id&quot : 1 }, &quotname&quot : &quot_id_&quot, &quotns&quot : &quottest.mycol&quot }, { &quotv&quot : 2, &quotkey&quot : { &quottitle&quot : 1, &quotdescription&quot : -1 }, &quotname&quot : &quottitle_1_description_-1&quot, &quotns&quot : &quottest.mycol&quot } ] >

MongoDB - Aggregation

عملگرهای جمعی، رکوردهای اطلاعات را پردازش می‌کنند و نتیجه‌های محاسبه شده را برمی‌گردانند.

در sql، دستور (*)count همراه Group by معادل یک تابع جمعی در MongoDB است.

متد ()aggregate

سینتکس پایه برای این متد به شکل زیر است :

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
مثال در این مجموعه شما داده های زیر را دارید.
{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },

اکنون اگر بخواهید از مجموعه‌ی بالا لیستی از تعداد دوره‌های نوشته شده توسط هر کاربر را نمایش دهید و استخراج کنید، باید ار متد ()aggregate به صورت زیر استفاده کنید :

> db.mycol.aggregate([{$group : {_id : &quot$by_user&quot, num_tutorial : {$sum : 1}}}]) { &quotresult&quot : [ { &quot_id&quot : &quottutorials point&quot, &quotnum_tutorial&quot : 2 }, { &quot_id&quot : &quotNeo4j&quot, &quotnum_tutorial&quot : 1 } ], &quotok&quot : 1 } >

معادل کوئری بالا در sql به این شکل خواهد بود: (*)select by_user, count

در مثال بالا، سندهای گروه بندی شده‌ توسط فیلد by_user را داریم و در هر اجرای by_user مقدار قبلی جمع کلی افزایش می‌یابد.

در اینجا لیست عبارت‌های جمعی موجود، آمده است.

مفهوم Pipeline در MongoDB

در Command shell یونیکس، خط لوله (Pipeline) به معنی امکان اجرای یک عملیات روی چندین ورودی و استفاده از خروجی بعنوان ورودی برای دستور بعدی و ادامه‌ی آن است. MongoDB نیز pipeline در MongoDB را در چارچوب توابع جمعی پشتیبانی می‌کند.

یک مجموعه از مراحل وجود دارند که هرکدام از آنها یک مجموعه از اسناد را بعنوان ورودی می‌گیرند و یک مجموعه از سند را بعنوان نتیجه (یا نتیجه را بعنوان سند JSON در پایان خط لوله) ارائه می‌دهند. این عمل به نوبه خود می‌تواند برای مرحله بعد و یا مراحل بعدی، استفاده شود.

مراحل ممکن در چارچوب توابع جمعی در زیر آمده اند:

  • $project : برای انتخاب چندین فیلد از یک مجموعه استفاده می‌شود.
  • $match : این یک عملگر فیلترگذاری است که می‌تواند میزان اسنادی را که بعنوان ورودی در مرحله بعد گرفته می‌شوند، کاهش دهد.
  • $group : این همان تابع جمعی است که در بالا توضیح داده شد.
  • $skip : توسط این عبارت، در یک لیست بدست آمده (نتیجه)، می‌توانید از لیست اسناد بصورت روبه جلو صرفنظر کنید.
  • $limit : این عبارت تعداد اسناد را توسط عدد گرفته شده، از موقعیت فعلی برای نمایش محدود می‌کند.
  • $unwind : این عبارت برای باز کردن (unwind) سندی که از آرایه‌ها بهره گیری می‌کند استفاده می‌شود. وقتی از آرایه استفاده می‌کنید، داده از نوع پیش پیوست (Pre-joined) است و با این نوع داده، این عمل برای داشتن سندهای اختصاصی نا تمام خواهد ماند. بنابراین با این مرحله می‌توانید میزان اسناد را برای مرحله بعد افزایش دهید.

به طور کلی عملیات جمعی مقادیر چندین سند را باهم گروه بندی می‌کند و می‌تواند یک نوع از عملگرها را روی اطلاعات دسته بندی شده انجام دهد تا یک نتیجه‌ی واحد را برگرداند.



MongoDB - Replication

تکثیر، افزونگی را فراهم می‌آورد و دسترسی پذیری داده‌ها را توسط کپی داده در چندین سرور مختلف افزایش می‌دهد.

این کار، یک پایگاه داده را در مقابل از دسترس خارج شدن یک سرور مفرد، محافظت می‌کند.

همچنین امکان بازیابی از خرابی سخت افزار و وقفه‌های سرویس را به کاربر می‌دهد.

توسط کپی برداری از اطلاعات، می‌توانید یکی از آنها را برای بازیابی، گزارشگیری و پشتیبان گیری اختصاص دهید.

چرا تکثیر؟

  • برای ایمن نگه داری اطلاعات
  • دسترسی پذیری بالای اطلاعات (شبانه روزی)
  • بازیابی اطلاعات
  • نیازی به از کار افتادن هنگام انجام عملیات نگه‌داری ندارد
  • مقایس پذیری خواندن داده‌ها (کپی برداری‌های اضافه برای عمل خواندن)
  • کپی اطلاعات برای نرم افزارها شفاف و قابل دستیابی است.

تکثیر در MongoDB چگونه عمل می‌کند ؟

MongoDB عمل تکثیر را با استفاده از مجموعه کپی (Replica set) انجام می‌دهد. مجموعه کپی یک گروه از نمونه‌های mongodb هستند که مجموعه داده یا dataset مشابهی را میزبانی (Host) می‌کنند.

در کپی داده، یک گره، گره اصلی است و تمام عملیات نوشتن را دریافت می‌کند. بقیه‌ی نمونه‌ها، عملیات را از گره اصلی، دریافت و اعمال می‌کنند.

بنابراین آنها هم dataset مشابهی دارند. مجموعه‌ی کپی تنها می‌تواند یک گره‌ اصلی داشته باشد.

  1. یک مجموعه‌ی کپی، یک گروه از دویا چند گره است. (عموما حداقل ۳ گره نیاز است.)
  2. در یک مجموعه‌ی کپی، یک گره، گره اصلی است و بقیه گره‌ها گره‌های ثانویه هستند.
  3. همه‌ی داده‌ها از گره‌ی اصلی به گره‌های ثانویه تکثیر می‌شوند.
  4. هنگام انجام عملیات نگه داری یا ازدسترس خارج شدن سرور، گزینش برای گره اصلی و انتخاب گره اصلی جدید آغاز می‌شود.
  5. گره از کار افتاده، بعد از بازیابی دوباره، به مجموعه کپی ملحق می‌شود و بعنوان یک گره ثانویه کار می‌کند.

در زیر یک نوع دیاگرام از تکثیر در MongoDB نشان داده شده است که در آن برنامه‌ی سمت کلاینت همیشه با گره‌ی اصلی در ارتباط است و گره‌ی اصلی، داده‌ها را گره‌های ثانویه تکثیر می‌کند.

ویژگی‌های مجموعه‌ی کپی

  • یک کلاستر از N عدد گره
  • هر گره‌ایی می‌تواند گره اصلی باشد .
  • همه‌ی عملیات نوشتن بر روی گره اصلی انجام می‌شود .
  • عمل ازدسترس خارج شدن سرور و جایگزین شدن یک گره بصورت اتوماتیک
  • بازیابی بصورت اتوماتیک
  • همراهی و توافق در گزینش گره اصلی

ساختن یک مجموعه کپی

در اینجا می‌خواهیم یک نمونه از mongodb را به یک مجموعه‌ی کپی تبدیل کنیم. برای این کار مراحل زیر را انجام دهید:

  • همه‌ی نمونه‌های در حال اجرای mongod را در سمت سرور، متوقف کنید.
  • اکنون mongod سمت سرور را با سوئیچ –replSet راه اندازی کنید.

سینتکس پایه –replSet به شکل زیر است:

mongod --port &quotPORT&quot --dbpath &quotYOUR_DB_DATA_PATH&quot --replSet &quotREPLICA_SET_INSTANCE_NAME&quot
mongod --port 27017 --dbpath &quotD:\set up\mongodb\data&quot --replSet rs0

دستور فوق یک نمونه از mongod را با نام rs0، روی پورت ۲۷۰۱۷ راه اندازی می‌کند. اکنون command prompt را باز کنید و به این نمونه mongod متصل شوید.

در سمت کلاینت، دستور ()rs.initiate را برای شروع کردن یک مجموعه‌ی کپی جدید صادر کنید.

برای چک کردن تنظیمات مجموعه‌ی کپی، دستور ()rs.conf را صادر کنید. برای چک کردن وضعیت مجموعه کپی نیز دستور ()rs.status را صادر کنید.

افزودن اعضا به مجموعه‌ی کپی

برای افرودن اعضا به مجموعه‌ی کپی، چند نمونه mongodb را در چندین کامپیوتر راه اندازی کنید.

اکنون برنامه‌ی سمت کلاینت را اجرا و دستور ()rs.add را اجرا کنید.

سینتکس

سینتکس پایه دستور ()rs.add به شکل زیر است:

>rs.add(HOST_NAME:PORT)

مثال

فرض کنید نام نمونه‌ی mongodb شما mongod1.net و بر روی پورت ۲۷۰۱۷ در حال اجراست. برای افزودن این نمونه به مجموعه کپی، دستور () rs.add را در سمت کلاینت اجرا کنید.

>rs.add(&quotmongod1.net:27017&quot) >

وجه کنید که فقط وقتی می‌توانید یک نمونه mongodb را برای مجموعه کپی اضافه کنید که به گره اصلی متصل باشید. برای چک کردن اینکه به گره اصلی متصل هستید، دستور ()db.isMaster را در سمت کلاینت صادر کنید.




MongoDB - Sharding

چرا Sharding؟

  • در عمل تکثیر، همه‌ی نوشتن‌ها به سمت گره اصلی می‌ روند.
  • پرس و جوهای حساس به تاخیر نیز به سمت گره اصلی می‌ روند.
  • مجموعه کپی مفرد به ۱۲ گره محدود است.
  • وقتی دیتاست خیلی بزرگ می‌شود، حافظه به اندازه کافی نمی‌تواند بزرگ شود.
  • دیسک محلی به اندازه‌ی کافی بزرگ نیست.
  • هزینه مقیاس پذیری عمودی بسیار بالاست.

عملیات Sharding در MongoDB

دیاگرام زیر نحوه Sharding در MongoDB را نشان می‌دهد:

در دیاگرام بالا سه جز اصلی وجود دارند که در ادامه توضیح داده شده‌اند:

Shards: Shard برای ذخیره داده استفاده می‌شود. آنها دسترس پذیری بالا و پایداری داده را فراهم می‌کنند.

در محیط تولید هر Shard یک مجموعه کپی جداست.

Config Servers: Config Server متا دیتای کلاستر را نگهداری می‌کند.

این داده‌ها شامل اطلاعات نگاشت دیتاست کلاستر برای Shardهاست. مسیریاب کوئری (query router) از این متا دیتا برای نشان گذاری عملیات برای Shard‌های تعیین شده استفاده می‌کند. در محیط تولید Shard شده، کلاسترها دقیقا ۳ سرور تنظیمات دارند.

Query Routers: مسیریاب کوئری‌ها بطور اساسی نمونه‌های mongos و واسط بین برنامه کلاینت هستند و عملیات را به Shard مناسب هدایت می‌کنند. مسیریاب کوئری عملیات را برای Shard، پردازش و نشان گذاری می‌کنند و نتیجه را برای کاربر برمی گردانند. یک Shard کلاستر شده می‌تواند شامل چندین مسیریاب کوئری (برای تقسیم بارگیری درخواست کلاینت) باشد. یک کلاینت می‌تواند درخواست هایش را یه یک مسیریاب کوئری ارسال کند. عموما یک Shard کلاستر شده چندین مسیریاب کوئری دارد.

همانطور که اندازه‌ی داده در افزایش است، شاید تنها یک ماشین  برای ذخیره سازی داده‌ها کافی نباشد و یا نتواند کارآیی قابل قبولی را برای خواندن و نوشتن فراهم کند. Sharding این مشکل را با مقایس پذیری افقی حل نموده است. توسط Sharding، می‌توانید دستگاه‌های دیگری را برای پشتیبانی از داده‌های درحال رشد بیافزایید و عملیات خواندن و نوشتن را بیشتر پوشش دهید.



MongoDB - Create Backup

نحوه پشتیبان گیری در MongoDB

برای پشتیبان گیری از اطلاعات، از فایل جداگانه‌ی دیگری درشاخه Bin استفاده میکنیم که MongoDump نام دارد و یک فایل دامپ را ایجاد میکند.

سینتکس پایه برای دستور mongodump به شرح زیر است :

>mongodump

مثال
سرور Mongod خود را شروع کنید فرض کنید که سرور mongod شما در localhost و در پرت ۲۷۰۱۷ اجرا می شود، دستور prompt را باز کنید و به پوشه bin در نمونه mongodb خود بروید و دستور mongodump را تایپ کنید.

اکنون فرض کنید مجموعه mycol دارای داده های زیر است.

>mongodump

فرمان به سرور در حال اجرا در ۱۲۷٫۰٫۰٫۱ و پورت ۲۷۰۱۷ متصل شده و تمام اطلاعات سرور را به دایرکتوری / bin / dump / متصل می کند.

پس خروجی فرمان به شکل زیر است :

در زیر لیستی از گزینه های موجود که می تواند با دستور mongodump مورد استفاده قرار گیرد آورده شده است

بازگرداندن داده ها

برای بازگرداندن اطلاعات پشتیبان از فرمان mongorestore MongoDB استفاده می شود.

این دستور تمام داده ها را از دایرکتوری پشتیبان بازیابی می کند.
سینتکس پایه برای دستور mongorestore به شکل زیر می باشد :

>mongorestore

نتیجه پشتیبان گیری از همه دیتابیس‌ها و همه قسمت‌ها به انضمام فایل‌ها در شاخه‌ای به اسم dump در پوشه Bin صورت میگیرد.آموزش پشتیبان گیری در MongoDB به اتمام رسید. در جلسه بعد توسعه در MongoDB  را آموزش خواهیم داد.با  ما همراه باشید.




MongoDB - Deployment

بهترین روش شامل نمونه سازی از راه اندازی شما، انجام آزمایش بار، نظارت بر شاخص های کلیدی، و استفاده از آن اطلاعات برای تنظیمات بخش اصلی این رویکرد است که به طور کامل سیستم شما را نظارت می کند.

این به شما کمک خواهد کرد که قبل از توسعه سیستم تولید خود را حفظ کنید و تعیین کنید که آیا باید ظرفیت را اضافه کنید. برای مثال، داشتن بینش در مورد استفاده از حافظه های احتمالی، می تواند باعث جلوگیری از ضربه زدن به قفل کردن نوشتن شود.

برای نظارت بر محیط توسعه در مونگو ، MongoDB برخی از دستورات زیر را فراهم می کند.

mongostat

این فرمان وضعیت تمام موارد مونگو را اجرا می کند و شمارنده ها را از عملیات پایگاه داده باز می کند.

این شمارنده ها شامل درج ها، نمایش ها، به روز رسانی ها، حذف، و مکان نما هستند.

همچنین این فرمان هنگام برخورد با  صفحهhitting، درصد قفل خود را نشان می دهد.

این به این معنی است که حافظه شما هنگام اجرا کم شده،یا مشکل ظرفیت نوشتن و برخی از مشکلات عملکرد بوجود آمده است.

برای اجرای دستور،روی نمونه ای از mongod خود شروع کنید.

در خط فرمان دیگر، روی مسیر bin در نصب mongodb بروید و mongostat را تایپ کنید.

D:\set up\mongodb\bin>mongostat

خروجی فرمان به شکل زیر می باشد :

mongotop

این فرمان فعالیت های خواندن و نوشتن نمونه MongoDB را بر اساس مجموعه جمع آوری و گزارش می کند.

به طور پیش فرض، mongotop اطلاعات را در هر ثانیه باز می گرداند، و شما می توانید آن را تغییر دهید.

شما باید بررسی کنید که این فعالیت خواندن و نوشتن با هدف برنامه شما منطبق است یا خیر.

برای اجرای دستور، نمونه ای از mongod خود را شروع کنید.

سپس در خط فرمانی دیگری، به مسیر bin روی نصب mongodb بروید و  mongotop را وارد کنید.

D:\set up\mongodb\bin>mongotop

خروجی فرمان به شکل زیر می باشد :

برای تغییر دستور mongotop برای به حداقل رساندن اطلاعات، یک شماره خاص بعد از دستور mongotop مشخص کنید.

D:\set up\mongodb\bin>mongotop 30

مثال بالا مقدار را هر ۳۰ ثانیه یکبار برمی گرداند.

به غیر از ابزار MongoDB، ابزار ۱۰gen یک سرویس مانیتورینگ میزبانی رایگان، سرویس مدیریت (MongoDB MMS) را فراهم می کند، که یک داشبورد را ایجاد می کند و به شما یک معیار از کل خوشه شما را می دهد

با تشکر از مطالعه این مقاله ,مثل همیشه کنجکاو باشید!!!

در دوره های آموزش تضمینی مجتمع فنی ارومیه که به صورت خصوصی و عمومی در دو شیوه حضوری و آنلاین برگزار می شود سرفصل های بسیار متنوع و کاربردی را بصورت پروژه محور آموزش داده می شود تا شخص کارآموز بتواند بلافاصله پس از اتمام این دوره در کمترین زمان ممکن وارد بازار کار شود.
آموزش تخصص ماست با ما حرفه ای شوید
جهت مشاوره با شماره 09149431772 در ارتباط باشید ...
https://www.aparat.com/javadjahangiriniopdc/playlists
MongoDB Tutorialآموزش دیتابیس مونگودبیآموزش دیتابیس مونگودبی MongoDB Tutorialجواد جهانگیریمجتمع فنی ارومیه
بنده دارای مدارک بین المللی شبکه ,برنامه نویسی, سرورهای ویندوزی و لینوکس هستم بیش از ده سال سابقه تدریس در زمینه های یاد شده را دارم. آموزش تخصص ماست با ما حرفه ای شوید 09149431772 مجتمع فنی ارومیه
شاید از این پست‌ها خوشتان بیاید