آشنایی با MongoDB
سیستمهای دیتابیس کلاسیک مانند MySQL و PostgreSQL دادهها را در قالب
جداول و سطرها ذخیره و سازماندهی میکنند و برای دسترسی و دستکاری دادهها به
زبان SQL متکی هستند. اما MongoDB یک سیستم دیتابیس NoSQL است که
از مدل دادهای مبتنی بر سند (document-oriented) استفاده میکند. یعنی دادهها را به
جای جداول، در قالب یک مجموعه از فایلهای متنی یا JSON ذخیره میکند که در هر فایل
یا سند، اطلاعات مربوط به یک شیء خاص ذخیره میشود.
فرض کنید میخواهیم اطلاعات مشتریان یک فروشگاه آنلاین را ذخیره کنیم.
در یک دیتابیس کلاسیک، باید یک جدول به موجودیت مشتری اختصاص دهیم و
فیلدهای مشخصی مانند نام، آدرس و غیره را به عنوان ستونهای جدول تعریف کنیم و
به ازای هر مشتری، یک سطر به جدول اضافه کنیم. پس، همهی مشتریها فیلدهای یکسانی دارند.
اما در یک دیتابیس NoSQL مانند MongoDB یک کالکشن برای موجودیت مشتری
تعریف میکنیم و اطلاعات هر مشتری را درون یک سند یا document قرار میدهیم.
بنابراین، هر مشتری یک سند جداگانه دارد و میتواند فیلدهای خاص خودش را داشته باشد.
دادهها در سند به فرمت JSON ذخیره میشوند که یک فرمت متنباز و
محبوب برای نمایش دادههای ساختاریافته در وب است.
JSON
{
"name": "Tom",
"age": 19,
"email": "tom@example.com",
}
به این ترتیب، میتوانیم اطلاعات متنوع را به راحتی و بدون نیاز به
تغییر ساختار دیتابیس، ذخیره کنیم. با این حساب، اجزای اصلی یک دیتابیس
MongoDB از این قرارند:
-
کالکشن (collection): در MongoDB کالکشنها معادل جدولها در SQL هستند.
اما با این تفاوت که کالکشنها مقید به ساختار خاصی نیستند و سندهای یک
کالکشن میتوانند ساختارهای مختلفی داشته باشند.
-
سند (document): در MongoDB یک سند معادل یک رکورد در جداول دیتابیسهای کلاسیک است.
یک نمونه سند را در بالا مشاهده کردید که اطلاعات یک مشتری را نگه میدارد.
-
فیلد (field): در MongoDB یک فیلد به یک ویژگی یا مشخصه از سند اشاره میکند.
در مثال بالا، name، age و email فیلد هستند.
در دیتابیسهای مبتنی بر SQL، دادههای مرتبط از طریق کلیدهای خارجی و
روابط بین جداول به هم مرتبط میشوند. اما ماهیت مبتنی بر سند دیتابیسهای NoSQL
آنها را به دیتابیسهای غیر رابطهای تبدیل میکند. البته این به این معنا نیست که
در MongoDB راهی برای برقراری ارتباط بین دادهها وجود ندارد. در ادامه،
با یک مثال خواهیم دید که چطور میتوانیم ارتباط مورد نیاز بین دادهها را در MongoDB ایجاد کنیم.
یک مثال ساده از MongoDB
فرض کنید یک سایت فروشگاهی داریم و میخواهیم اطلاعات محصولات و
مشتریان را ذخیره کنیم. ساختار دیتابیس ما میتواند به این صورت باشد که
یک کالکشن برای محصولات و یک کالکشن برای مشتریان داشته باشد.
هر سند در کالکشن مربوط به محصولات، به یک محصول مشخص مربوط است و
اطلاعات آن را نگه میدارد. مثلاً سند نمونهی زیر اطلاعات مربوط به یک لپتاپ را نگه میدارد.
JSON
{
"product_id": "p123",
"brand": "asus",
"model": "N550JK",
"color": "black",
"price": 1000
}
در کالکشن مربوط به مشتریان هم یک سند نمونه میتواند به
صورت زیر باشد.
JSON
{
"customer_id": "c001",
"name": "tom",
"email": "tom@example.com",
"orders": [{product_id: "p123", quantity: 2}]
}
همانطور که میبینید، فیلد orders که بیانگر سفارشات مشتری است،
یک آرایه از اشیاء است که هر شیء مشخصات یک سفارش را شامل است و از
جمله، یک پراپرتی با نام product_id دارد که محصول حریداریشده را مشخص
میکند و به این ترتیب، ارتباط لازم ایجاد میشود.
نصب و کانفیگ MongoDB
قبل از هر چیز، باید MongoDB را نصب کنیم. این کار روی پلتفرمهای مختلف
به شکلهای متفاوتی انجام میشود و بنا نداریم به جزئیات این موضوع برپدازیم.
اما به طور خلاصه، اگر از ویندوز استفاده میکنید، کافیست به وبسایت
MongoDB بروید و نسخهی مناسب ویندوز را دریافت کنید و آن را نصب کنید.
اگر از یک توزیع لینوکسی استفاده میکنید، باید ریپوزیتوری اختصاصی MongoDB را به
لیست ریپوزیتوریها اضافه کنید و سپس، MongoDB را نصب و آن را راهاندازی کنید.
جزئیات مربوط به نصب MongoDB روی سیستمعاملهای مختلف در وبسایت MongoDB در دسترس است و
با یک جستجوی ساده هم میتوانید این کار را انجام دهید.
حالا باید یک پروژهی Express ایجاد کنیم و آن را برای
اتصال به MongoDB تنظیم کنیم. ابتدا با استفاده از کامندهای زیر، یک
پروژه ایجاد میکنیم.
mkdir test
cd test
npm init -y
کامند اول، یک دایرکتوری با نام test میسازد، کامند دوم آن را به عنوان
دایرکتوری جاری تعیین میکند و کامند سوم، یک فایل package.json
با مقادیر پیشفرض ایجاد میکند. مثل قبل، مقدار فیلد name را در این فایل به
app.js تغییر دهید و یک فایل با همین نام در دایرکتوری پروژه ایجاد کنید.
حالا پکیجهای مورد نیاز را با استفاده از کامند زیر نصب کنید.
npm install express morgan mongoose dotenv
این کامند علاوه بر express و morgan دو پکیج دیگر را هم به پروژه اضافه میکند.
پکیج اول mongoose نام دارد که یک کتابخانهی محبوب برای کار با MongoDB
در پروژههای Node.js است. این کتابخانه با ایجاد یک لایه روی
MongoDB کار با آن و ساخت مدلهای ساختیافته را سادهتر میکند.
پکیج دوم هم dotenv نام دارد و برای مدیریت متغیرهای محیطی و
محافظت از اطلاعات حساس کاربرد دارد. کاربرد هر دو پکیج را در این درس و درس بعدی خواهیم دید.
توجه داشته باشید که ما به پکیج mongodb هم نیاز داریم اما وقتی
mongoose را نصب کنیم، mongodb هم به طور خودکار نصب میشود. اگر
بخواهیم ارتباط با MongoDB را بدون استفاده از mongoose هندل کنیم، باید
در کامند بالا به جای mongoose از mongodb استفاده کنیم.
در دایرکتوری اصلی پروژه یک فایل با نام .env ایجاد کنید.
این فایلی است که متغیرهای محیطی را در آن ذخیره میکنیم.
جالا باید Connection String یا رشتهی اتصال به MongoDB را در قالب
یک متغیر محیطی به این فایل اضافه کنیم. اگر از یک سرور لوکال استفاده میکنید،
رشتهی اتصال باید به صورت زیر باشد.
.env
MONGODB_URI = mongodb://localhost:27017
حالا یک دایرکتوری با نام libs در ریشهی پروژه ایجاد میکنیم و فایل
dbConnect.js را با محتوای زیر در آن قرار میدهیم.