
MongoDB چیست؟ کاربردها، مزایا و آموزش دیتابیس مانگو دی بی
MongoDB یک پایگاه داده NoSQL سند محور است که اطلاعات را در قالب سندهایی شبیه JSON نگه میدارد. این ساختار برای برنامههایی کاربرد دارد که دادههای متنوع دارند و نیازهایشان مرتب تغییر میکند. اما انعطاف بیشتر بهمعنی کنارگذاشتن طراحی دیتابیس نیست؛ اتفاقا مدل اشتباه، هزینه خود را هنگام افزایش دادهها نشان میدهد. در این مقاله […]
MongoDB چیست؟ کاربردها، مزایا و آموزش دیتابیس مانگو دی بی
MongoDB یک پایگاه داده NoSQL سند محور است که اطلاعات را در قالب سندهایی شبیه JSON نگه میدارد. این ساختار برای برنامههایی کاربرد دارد که دادههای متنوع دارند و نیازهایشان مرتب تغییر میکند. اما انعطاف بیشتر بهمعنی کنارگذاشتن طراحی دیتابیس نیست؛ اتفاقا مدل اشتباه، هزینه خود را هنگام افزایش دادهها نشان میدهد. در این مقاله از مجله پارس هاست، ساختار MongoDB، ویژگیها، کاربردها و تفاوت آن با MySQL را بررسی میکنیم و سراغ نصب و چند دستور عملی میرویم. برای شناخت دقیقتر این دیتابیس، همراه ما باشید.
مونگو دی بی (MongoDB) چیست؟
دیتابیس MongoDB اطلاعات را بهجای ردیفها و ستونهای جدول، داخل سندهای منعطف ذخیره میکند. هر سند مجموعهای از فیلدها و مقدارهاست؛ مثلا نام مشتری، شماره تماس، آدرس و فهرست علاقهمندیهای او.
عنوان NoSQL به خانوادهای از پایگاههای داده اشاره دارد که مدل رابطهای سنتی، مبنای اصلی ساختارشان نیست. البته این عنوان بهمعنی نداشتن رابطه میان دادهها یا پشتیبانی نکردن از تراکنش نیست.
برای شناخت اجزای MongoDB، این تفاوتها را در نظر بگیرید:
- MongoDB Server: موتور اصلی ذخیرهسازی و پردازش درخواستها.
- MongoDB Shell یا mongosh: محیط اجرای دستورها.
- MongoDB Compass: رابط گرافیکی مشاهده و مدیریت دادهها.
- MongoDB Atlas: سرویس ابری مدیریت دیتابیس.
نصب Compass بهتنهایی یک سرور دیتابیس راه نمیاندازد؛ این ابزار به سرور محلی یا راه دور متصل میشود.
MongoDB چگونه کار میکند؟
برنامه از طریق درایور زبان برنامهنویسی به MongoDB متصل میشود. سپس درخواست ثبت، خواندن، ویرایش یا حذف اطلاعات را میفرستد. سرور درخواست را پردازش میکند و نتیجه را برمیگرداند.
مدل داده باید با شیوه دسترسی برنامه هماهنگ باشد. مثلا وقتی برنامه همیشه مشخصات کالا و ویژگیهای آن را کنار هم میخواند، نگهداری این اطلاعات در یک سند منطقی است. اما قرار دادن تمام سفارشهای یک مشتری داخل سند او، با رشد سفارشها دردسر ایجاد میکند.
۱. مسیر درخواست در کلاستر شاردشده MongoDB
در این معماری، برنامه مستقیما با تکتک سرورهای ذخیرهسازی ارتباط نمیگیرد. درخواست ابتدا به مسیریاب میرسد و سپس به بخش مرتبط هدایت میشود. اجزای تصویر این وظایف را دارند:
- برنامه کاربر (Client Application): درخواست خواندن یا نوشتن اطلاعات را از طریق درایور MongoDB ارسال میکند.
- مسیریاب درخواست (mongos): درخواست را دریافت میکند و تشخیص میدهد کدام Shard یا Shardها باید آن را پردازش کنند. سپس نتیجه را به برنامه برمیگرداند.
- سرورهای پیکربندی (Config Servers): اطلاعات ساختار کلاستر و محل توزیع دادهها را نگه میدارند. مسیریاب از این اطلاعات برای هدایت درخواستها استفاده میکند.
- شاردها (Shards): هر شارد بخشی از دادهها را نگه میدارد. در تصویر، هر شارد یک Replica Set شامل یک Primary و دو Secondary دارد؛ Primary نوشتنها را دریافت میکند و Secondaryها تغییرات را دنبال میکنند.

فرض کنید اطلاعات محصولات فروشگاه میان سه شارد توزیع است. اگر فیلتر درخواست، اطلاعات لازم از کلید شارد را داشته باشد، mongos ممکن است فقط شارد مرتبط را هدف بگیرد. در غیر این صورت، احتمال دارد درخواست را به چند شارد بفرستد و پاسخها را ترکیب کند.
نکته: سرورهای پیکربندی در مسیر انتقال محتوای اصلی درخواست به شاردها قرار ندارند. mongos اطلاعات مسیریابی را کش میکند؛ بنابراین برای هر درخواست، مراجعه تازه به Config Servers لازم نیست.
۲٫ Document و Collection در MongoDB چیست؟
Document واحد اصلی داده و Collection مجموعهای از سندهاست. هر دیتابیس نیز چند Collection دارد؛ برای نمونه، فروشگاه اینترنتی مجموعههای products، customers و orders را نگه میدارد.
سند زیر مشخصات یک کالای فرضی را نمایش میدهد:
{
“name”: “VPS Basic”,
“price”: 450000,
“specs”: {
“ramGB”: 4,
“storageGB”: 80
},
“locations”: [“Iran”, “Germany”]
}

در این مثال، specs سند توکار و locations آرایه است. در Collection استاندارد، فیلد _id شناسه یکتای هر سند را مشخص میکند. اگر آن را تعیین نکنید، درایور یا سرور معمولا یک ObjectId میسازد.
۳٫ تفاوت JSON و BSON در ذخیرهسازی دادهها
JSON قالبی متنی برای نمایش و تبادل داده است. MongoDB اطلاعات را با BSON نگه میدارد؛ قالبی دودویی که علاوهبر ساختارهای JSON، نوعهایی مانند تاریخ، داده باینری و ObjectId دارد.
وبسایت رسمی MongoDB درباره قالب ذخیرهسازی توضیح میدهد:
“MongoDB stores data records as BSON documents.”
«MongoDB رکوردهای داده را در قالب سندهای BSON ذخیره میکند.»
بنابراین، کدی که در مثال بالا میبینید نمایش خوانای اطلاعات است، نه نمایش مستقیم بایتهای BSON روی دیسک.
مهمترین ویژگیهای MongoDB
ویژگیهای MongoDB زمانی ارزش دارند که با نیاز برنامه هماهنگ باشند. سه قابلیت زیر، بخش مهمی از معماری این دیتابیس را تشکیل میدهند.
۱. ساختار منعطف دادهها
سندهای یک Collection الزاما فیلدهای یکسان ندارند. مثلا سند لپتاپ مشخصات پردازنده دارد و سند لباس، اندازه و جنس پارچه.
بااینحال، ساختار منعطف مجوز بینظمی نیست. برای فیلدهایی مانند قیمت، ایمیل و وضعیت سفارش، نوع و قواعد مشخص تعیین کنید. قابلیت Schema Validation نیز ورود داده نامعتبر را محدود میکند. این کنترل کمک میکند یک برنامه قیمت را عدد و برنامه دیگر همان قیمت را رشته متنی ثبت نکند.

۲. مقیاسپذیری با Sharding
Sharding دادههای یک Collection را میان چند Shard توزیع میکند. این روش زمانی کاربرد دارد که ظرفیت ذخیرهسازی یا توان پردازشی یک سرور پاسخگوی بار کاری نباشد.
انتخاب Shard Key اهمیت زیادی دارد؛ چون نحوه توزیع داده و مسیریابی درخواستها به آن وابسته است. کلید نامناسب ممکن است فشار را روی بخشی از کلاستر متمرکز کند. پس شاردینگ را راهحل فوری هر کندی ندانید؛ ابتدا کوئریها، ایندکسها و منابع سرور را بررسی کنید.
۳. دسترسپذیری بالا با Replication
در Replica Set، چند عضو نسخهای از دادهها را نگه میدارند. عضو Primary نوشتنها را دریافت میکند و اعضای Secondary تغییرات را دنبال میکنند. اگر Primary از دسترس خارج شود، اعضای واجد شرایط با رعایت شرایط انتخاب، Primary جدید تعیین میکنند.
در مستندات رسمی MongoDB آمده است:
“A replica set is a group of mongod instances that maintain the same data set.”
«Replica Set گروهی از نمونههای mongod است که مجموعه داده یکسانی را نگه میدارند.»
نکته: Replication جای بکاپ را نمیگیرد. حذف اشتباه اطلاعات هم ممکن است به اعضای دیگر منتقل شود؛ پس برنامه پشتیبانگیری مستقل لازم است.
MongoDB چه کاربردهایی دارد؟
MongoDB برای اطلاعات نیمهساختاریافته و مدلهایی با ویژگیهای متنوع کاربرد دارد. چند نمونه ملموس عبارتاند از:
- کاتالوگ فروشگاه با مشخصات متفاوت برای هر گروه محصول.
- پروفایل کاربران با تنظیمات و ترجیحهای اختصاصی.
- سامانه مدیریت محتوا با انواع مختلف نوشته و محتوا.
- ثبت رویدادهای برنامه و دادههای عملیاتی با ساختار متغیر.
برای نمونه، در یک فروشگاه فرضی، کتاب فیلد نویسنده دارد و گوشی فیلد ظرفیت باتری. مدل سندمحور نگهداری این تفاوتها را سادهتر میکند. بااینحال، تعداد کاربران یا حجم اطلاعات بهتنهایی دلیل انتخاب MongoDB نیست؛ الگوی خواندن، نوشتن و روابط دادهها هم تعیینکنندهاند.
مزایا و معایب MongoDB چیست؟
مزیت اصلی MongoDB، هماهنگی مدل سندی با بسیاری از ساختارهای برنامهنویسی است. اما این هماهنگی، هزینه طراحی و نگهداری را حذف نمیکند.

مهمترین مزایا و محدودیتها را کنار هم ببینید:
| مزایا | محدودیتها و ملاحظات |
| تغییر تدریجی ساختار سندها | نیاز به کنترل نوع و کیفیت داده |
| نگهداری اطلاعات مرتبط کنار هم | احتمال تکرار داده در مدل نامناسب |
| پشتیبانی از ایندکس و تجمیع داده | مصرف فضا و هزینه نوشتن برای ایندکسها |
| توسعه افقی با شاردینگ | پیچیدگی بیشتر مدیریت کلاستر |
| پشتیبانی از تراکنش چند سندی | نیاز به استقرار و تنظیمات مناسب |
MongoDB عملیات روی یک سند را بهصورت اتمیک اجرا میکند؛ یعنی تغییرات آن عملیات، یکپارچه اعمال میشوند. برای عملیات مرتبط میان چند سند نیز تراکنش دارد، اما تراکنش چند سندی به Replica Set یا کلاستر شاردشده نیاز دارد. پس عبارت «MongoDB تراکنش ندارد» درست نیست.
تفاوت MongoDB و MySQL چیست؟
تفاوت اصلی این دو دیتابیس به مدل داده و شیوه کار با روابط برمیگردد. هیچکدام در تمام پروژهها سریعتر یا مناسبتر نیستند.
جدول زیر معیارهای اولیه انتخاب را نشان میدهد:
| معیار | MongoDB | MySQL |
| مدل اصلی | سندمحور | رابطهای و جدولی |
| زبان رایج درخواست | MQL و Aggregation Pipeline | SQL |
| ساختار داده | فیلدهای منعطف با امکان اعتبارسنجی | ستونها و نوعهای مشخص |
| مدیریت روابط | سند توکار، ارجاع و $lookup | کلید خارجی و JOIN |
| تراکنش | تکسندی و چند سندی با شرایط لازم | پشتیبانی گسترده با InnoDB |
| تناسب رایج | داده متنوع و دسترسی سندی | روابط پررنگ و ساختار جدولی |
برای شناخت زبان درخواستهای دیتابیس رابطهای، مقاله SQL چیست را بخوانید. MySQL با موتور InnoDB از تراکنش و کلید خارجی پشتیبانی میکند. این قابلیتها برای سامانههایی که سازگاری روابط دادهها اهمیت زیادی دارد، کاربرد دارند. در مقابل، MongoDB امکان نگهداری بخشهایی از اطلاعات مرتبط در یک سند را میدهد.
اگر گزارشهای شما مرتب چندین جدول مرتبط را ترکیب میکنند، مدل رابطهای را جدی بررسی کنید. اگر برنامه بیشتر یک موجودیت کامل و ویژگیهای متغیر آن را میخواند، مدل سندی ارزش آزمایش دارد.
آموزش نصب و راهاندازی MongoDB
برای شروع آزمایشی، داکر (Docker) مسیر کوتاهی است. ابتدا Docker و mongosh را نصب کنید. سازگاری سیستم عامل، پردازنده و نسخه انتخابی را نیز بررسی کنید.
۱. اجرای سرور آزمایشی
فرمان زیر کانتینر MongoDB را اجرا میکند، دادهها را در Volume نگه میدارد و پورت را فقط روی آدرس محلی میزبان باز میکند:
docker run -d –name mongodb-lab -p 127.0.0.1:27017:27017 -v mongodb_lab_data:/data/db mongodb/mongodb-community-server:latest

این نمونه برای تمرین محلی است و احراز هویت ندارد. برای محیط عملیاتی، نسخه مشخص، احراز هویت، دسترسی شبکه محدود و برنامه بکاپ لازم است؛ از برچسب متغیر latest برای استقرار قابلتکرار استفاده نکنید.
۲. اتصال و بررسی سرویس
پس از اجرای کانتینر، با فرمان زیر به سرور محلی متصل شوید:
mongosh “mongodb://127.0.0.1:27017”
سپس پاسخگویی سرور را بررسی کنید:
db.runCommand({ ping: 1 })
وجود ok: 1 در پاسخ، موفقیت این درخواست را نشان میدهد. این آزمایش، کیفیت عملکرد یا آمادگی محیط برای استفاده عملیاتی را اثبات نمیکند.

۳. مشاهده اطلاعات در Compass
در MongoDB Compass همان آدرس اتصال را وارد کنید. سپس دیتابیسها، Collectionها و سندها را ببینید. بخشهای مشاهده سند، فیلتر و مدیریت ایندکس برای شروع کاربرد دارند. پیش از هر ویرایش یا حذف، نام دیتابیس و محیط اتصال را کنترل کنید.

دستورات اولیه MongoDB با مثال عملی
مثالهای این بخش برای محیط تمرینی هستند. ابتدا در mongosh دیتابیس آزمایشی را انتخاب کنید:
use hosting_demo
دستور use فقط دیتابیس فعال را انتخاب میکند. در این مثال، MongoDB با اولین درج موفق سند، دیتابیس و Collection را ایجاد میکند
۱. ثبت و خواندن اطلاعات
دستور زیر یک پلن فرضی را در مجموعه محصولات ثبت میکند:
db.products.insertOne({
name: “VPS Basic”,
ramGB: 4,
active: true
})
برای یافتن محصولات فعال با حداقل چهار گیگابایت رم، این فیلتر را اجرا کنید:
db.products.find({
active: true,
ramGB: { $gte: 4 }
})
عملگر $gte بهمعنی «بزرگتر یا مساوی» است.

۲. ویرایش و حذف اطلاعات
فرمان زیر مقدار رم اولین محصول مطابق فیلتر را تغییر میدهد:
db.products.updateOne(
{ name: “VPS Basic” },
{ $set: { ramGB: 8 } }
)
برای حذف همان محصول آزمایشی، این دستور را اجرا کنید:
db.products.deleteOne({ name: “VPS Basic” })
در پروژه واقعی، برای هدفگیری دقیق از شناسه یکتا استفاده کنید؛ نام محصول لزوما یکتا نیست.
۳. ساخت ایندکس
اگر برنامه مرتب روی ramGB فیلتر میکند، ایندکس مناسب را بررسی کنید. دستور زیر ایندکس صعودی این فیلد را میسازد:
db.products.createIndex({ ramGB: 1 })
ایندکس همیشه رایگان نیست! هر ایندکس فضا مصرف میکند و هنگام تغییر اطلاعات، هزینه نگهداری دارد. بنابراین ایندکس متناسب با کوئری بسازید؛ نه برای تمام فیلدها.

چه زمانی MongoDB انتخاب مناسبی است؟
زمانی MongoDB را بررسی کنید که دادههای متنوع دارید، دسترسی برنامه حول سندها شکل میگیرد و تیم شما توان مدیریت آن را دارد.
پیش از انتخاب نهایی، پاسخ این پرسشها را مشخص کنید:
- برنامه بیشتر چه اطلاعاتی را کنار هم میخواند؟
- کدام عملیات به تراکنش چندسندی نیاز دارند؟
- رشد داده و تعداد درخواستها چقدر است؟
- چه کسی امنیت، بکاپ و بازیابی را مدیریت میکند؟
برای استقرار مستقل MongoDB، به منابع کافی و دسترسی مدیریتی نیاز دارید. پیش از خرید سرور مجازی لینوکس، سازگاری نسخه MongoDB با سیستمعامل، ظرفیت رم، فضای ذخیرهسازی و امکان ارتقای منابع را بررسی کنید.
پیش از انتقال داده واقعی، مانیتورینگ را فعال کنید
مانیتورینگ MongoDB را به زمان بروز مشکل موکول نکنید. زمان پاسخ کوئریها، مصرف حافظه، فضای دیسک، تعداد اتصالها و تاخیر Replication را زیر نظر بگیرید.
ابزار mongostat آمار عملیات را نمایش میدهد و mongotop فعالیت خواندن و نوشتن Collectionها را گزارش میکند. این ابزارها در بسته MongoDB Database Tools قرار دارند. برای شروع، یک خط مبنا از وضعیت عادی بسازید تا تغییرهای غیرعادی را تشخیص دهید.
سوالات متداول درباره MongoDB
۱. MongoDB چیست و چه تفاوتی با دیتابیس رابطهای دارد؟
MongoDB یک پایگاه داده سندمحور است. اطلاعات را در سندها نگه میدارد؛ دیتابیس رابطهای عمدتا از جدولها و روابط میان آنها استفاده میکند.
۲. آیا برای استفاده از MongoDB باید Node.js بدانم؟
خیر. MongoDB درایورهای مختلفی دارد و به Node.js محدود نیست. زبان برنامهنویسی را براساس نیاز پروژه انتخاب کنید.
۳. آیا هاست اشتراکی معمولی برای MongoDB کافی است؟
فقط زمانی که سرویسدهنده صریحا از آن پشتیبانی کند. نصب مستقل سرور دیتابیس معمولا به دسترسی و منابعی فراتر از هاست اشتراکی نیاز دارد.
۴. آیا MongoDB همیشه از MySQL سریعتر است؟
خیر. مدل داده، ایندکسها، نوع درخواست، سختافزار و تنظیمات روی نتیجه اثر دارند. مقایسه معتبر به آزمایش با بار کاری واقعی نیاز دارد.
۰