در این آموزش مونگو دی بی که بخشی از آشنایی با مبانی مونگو دی بی می باشد، بعد از مطالعه کامل مقاله آموزش نصب مانگو دی بی و MongoDB Compass پس از اینکه متوجه شدیم منگو دی بی چیست، می خواهم درمورد مبانی مونگو دی بی صحبت کنیم.
منظور از مفاهیم مبانی مونگو دی بی، آشنایی با مواردی مانند اسناد documents، مجموعه ها collections و پایگاه داده ها databases و فضاهای نام namespaces صحبت کنیم.
ساختارهای داده (Data formats)
در مونگودی بی mongodb، اغلب با فرمت های JSON و BSON سرکار دارید. بنابراین آشنایی، درک و شناسایی این ساختار این فرمت ها مهم و ضروری است.
JSON
JSON مخفف JavaScript Object Notation است. syntax یا ساختار دستوری Json براساس نسخه JavaScript ECMA-262 3rd ویرایش سوم است.
یک سند JSON مجموعه ای از فیلدها fields و مقادیر values در یک ساختار سازماندهی شده تشکیل یک سند JSON را می دهد.
مثلا:
{
"first_name": "John",
"last_name": "Doe",
"age": 22,
"skills": ["Programming","Databases", "API"]
}
BSON
BSON مخفف Binary JSON است که یک کد باینری serialize شده شبیه اسناد JSON است.
دلیل استفاده از BSON به جای JSON چیست؟
دلیل استفاده از BSON به جای JSON این هستش که ساختار JSON در یک سری data type ها محدودیت هایی وجود دارد که مونگو. دی بی بایستی از ساختار BSON استفاده کند.
اسناد (Documents)
در مونگو دی بی داده ها و اطلاعات به عنوان اسناد ذخیره می شوند که خیلی ساده به آنها BSON documents گفته می شود.
یک سند document شامل مجموعه ای است که به صورت جفت پارامتر (فیلد و مقدار) می باشد:
{
field_name1: value1,
field_name2: value2,
field_name3: value3,
...
}
دراین syntax نام فیلد نام در داخل رشته متنی strings قرار می گیرد و مقادیر می تواند شامل اعداد numbers، رشته های متنی strings، اشیا objects ، آرایه ها arrays و…. باشند.
{
_id: ObjectId("5f339953491024badf1138ec"),
title: "MongoDB Tutorial",
isbn: "978-4-7766-7944-8",
published_date: new Date('June 01, 2020'),
author: { first_name: "John"
, last_name: "Doe"}
}
هر اسناد دارای مقادیر به صورت زوج جفت (فیلد و مقدار) به شکل زیر است:
- فیلد _id یک مقدار ObjectId را نگه می دارد.
- فیلد title یک مقدار از نوع رشته متنی string را نگه می دارد.
- فیلد isbn هم یک مقدار از نوع رشته متنی string را نگه می دارد.
- فیلد published_date هم یک مقداری از نوع تاریخ date را نگه می دارد.
- فیلد author به صورت یک embedded document است که این پارامتر شامل دو فیلد first_name و last_name است.
اگر با پایگاه داده از نوع سیستم مدیریت پایگاه داده رابطه ای relational database management system (RDBMS) آشنایی داشته باشید متوجه خواهید شد که در مونگو دی بی یک سند document شبیه به یک رکورد Record در جدول است، اما سند با اطلاعاتی بسیار واضحتر و گویاتر.
در مونگو دی بی هر سند document نام فیلدها دارای یک سری محدودیت هایی می باشد:
- در مونگو دی بی فیلد _id یک فیلد ثابت در هر سند و نام آن رزرو شده است که مقدار آن در هر سند، کلید شناسایی برای هر سند و دارای مقدار منحصر به فرد هر سند است.
- نام فیلد در سند نمی تواند شامل کاراکتر null باشد.
- نام فیلدها در سطح بالا Top-level نمی تواند با کاراکتر (
$
) شروع شود و تعریف شود.
مجموعه ها (Collections)
در مونگو دی بی، اسناد Documents را در یک مفهومی به نام مجموعه (Collection) ذخیره می شود.
در مونگو دی بی یک Collection مجموعه ای از اسناد document است.
یک Collection شبیه یک جدول در RDBMS است.
RDBMS | MongoDB |
Rows | Documents |
Tables | Collections |
برخلاف جداول که با یک اسکیما schema ثابت تعریف می شود یک collection می تواند دارای اسکیماهای پویا باشد.
این به این معنی است که یک collection ممکن است حاوی اسنادی باشد که دارای تعداد متفاوتی فیلد با نام “shape” در اسناد متفاوت در یک collection.
به عنوان مثال، می توانید اسناد زیر را در یک collection ذخیره کنید:
{
title: "MongoDB Tutorial",
published_date: new Date('June 01, 2020')
}
{
title: "MongoDB Basics",
published_date: new Date('Jan 01, 2021'),
isbn": "978-4-7766-7944-8"
}
درمثال بالا اگر توجه کنید متوجه می شوید که سند دوم یک فیلد بیشتر از سند اول دارد. شما در مونگو دی بی می توانید فیلد با دو نام یکسان با مقادیر کاملا متفاوتی برای هرسند داشته باشید.
هر collection یک نام دارد. به عنوان مثال: collection به نام کتاب.
نام collection نمی تواند شامل موارد زیر باشد:
- نام collection نمی تواند با کاراکتر & تعریف شود.
- نام collection با نمی تواند کاراکتر null تعریف شود.
- نام collection به صورت یک رشته متنی خالی تعریف شود.
- نام collection نمی تواند با نام system تعریف شود به دلیل این که این نام در پایگاه داده مونگو دی بی ررزو شده هستش که در سرور مونکو دی بی به صورت پیش فرض collection به نام system تعریف شده است.
پایگاه داده ها (Databases)
مونگو دی بی، مجموعه ای از collections را در یک پایگاه داده database ذخیره می کند. یک single instance از مونگو دی بی می توانید چندین database پایگاه داده را host میزبانی و مدیریت کند.
یک پایگاه داده database را در مونگو دی بی می توان با هرنامی تعریف کرد مثلا نام badudb اما:
- اما در تعریف database نمی توان یک رشته خالی ” ” تعریف کرد.
- در تعربف database می توان از تمام کراکترهای /, \, ., “, *, <, >, :, |, ?, $ و یا فاصله Space استفاده کرد.
- حداکثر اندازه نام پایگاه داده 64 bytes است.
در مونگو دی بی تعریف یک سری نام ها برای پایگاه داده database رزرو شده است و امکان تعریف نیست و در تعریف پایگاه داده نمی توان از این نام های admin
, local
و config
استفاده کرد و باید با یک نام دیگری پایگاه داده را تعریف کنید.
فضای نام (Namespace)
فضای نام یا همان Namespace ترکیبی از نام databases به همراه collections در همان database است.
فضای نام Namespace به شما این امکان را می دهد که collections را به طور کامل بررسی و فراخوانی کنید.
به عنوان مثال: اگر collection به نام book و database به نام bookdb باشد فضای نام Namespace به صورت زیر می باشد :
bookdb.books
خلاصه
مونگو دی بی رکوردهای داده ها را به صورت اسناد BSON documents ذخیره می کند. یک document مجموعه ای زوج از فیلدها fields و مقادیر values است.
مونگو دی بی، documents را دریک collection و collections را در یک database ذخیره می کند.
فضای نام یا همان Namespace هم ترکیبی از نام database و نام collection است که هدف استفاده از namespace برای دسترسی راحت تر و کار با collection است.
برای ادامه آمورش MongoDB می توانید مقاله آشنایی با انواع Data Type در مانگو دی بی را مطالعه کنید.