در قسمت قبل به شما توضیح دادم که معنی ساختار دادن به پایگاه های داده ای مانند MongoDB چیست. در این قسمت باید به سراغ برخی از مباحث عملی برویم. برای شروع دستور زیر را در Shell اجرای می کنیم:
db.products.deleteMany({})
با این کار داده های قبلی از products حذف می شوند تا یک شروع دوباره داشته باشیم. ما در قسمت قبل سه حالت کلی را برای ذخیره داده در نظر گرفتیم:
من می خواهم در این جلسه دو حالت واقعی و کاربردی را بررسی کنم؛ کاملا ساختار یافته (امثال MySQL) و نیمه ساختار یافته (امثال MongoDB). بیایید در عمل نگاهی به این دو ساختار بیندازیم.
db.products.insertOne({name: "A book", price: 12.99})
با اجرای این کد، document آن در products ایجاد می شود. سپس:
db.products.insertOne({name: "A T-Shirt", price: 20.99})
حالا اگر با دستور find.pretty از آن ها خروجی بگیریم، داده هایمان را می بینیم:
"_id" : ObjectId("5e8553ffa6a97e5e05dd3cfa"), "name" : "A book", "price" : 12.99 } "_id" : ObjectId("5e855476a6a97e5e05dd3cfb"), "name" : "A T-Shirt", "price" : 20.99 }
این یک مثال خوب از دنیای MySQL است. فیلد ها (چه نام و چه تعدادشان) کاملا ثابت است و تنها مقدار آن ها تغییر می کند. حالا فرض کنید محصول دیگری را نیز داشته باشیم:
db.products.insertOne({name: "A Computer", price: 1299, details: {cpu: "Intel i7 8770"}})
همانطور که می بینید این document فیلدی به نام details (جزئیات) دارد. فرض کنید در فروشگاه ما، فقط برخی از محصولات (مثل کامپیوترها) دارای فیلد details هستند. با اضافه کردن این document به products، وارد دنیای MongoDB می شویم. انجام چنین کاری در MySQL ممکن نیست مگر اینکه فیلد details را برای همه تعریف کنیم و آن هایی که details ندارند، مقدارشان null باشد. یعنی اگر بخواهم دقیقا حالت MySQL را در MongoDB پیاده کنم باید بگویم:
db.products.insertOne({name: "A book", price: 12.99, details: null})
حالا با اجرای find.pretty از آن خروجی می گیریم:
"_id" : ObjectId("5e855780a6a97e5e05dd3cfd"), "name" : "A book", "price" : 12.99, "details" : null }
null مقدار خاصی است که می گوید هیچ مقداری وجود ندارد. اگر تمام ردیف های خود را بدین شکل تعریف کنید تا همه فیلد ها یکی باشد از یک ساختار شبیه به ساختار MySQL استفاده کرده اید بنابراین ساختار دهی در پایگاه داده MongoDB دقیقا همین است.
نوع داده یا data type یعنی داده ما چه جنسی دارد. ما می توانیم انواع داده های مختلفی را در MongoDB داشته باشیم که تمام آن ها را در تصویر زیر برایتان آورده ام:
اولین نوع داده text یا متن است که تا به حال ده ها بار از آن استفاده کرده ایم. این نوع داده با علامت double quotation (همان "") مشخص می شود. نوع داده بعدی Boolean است که یا true یا false هستند. نوع داده بعدی اعداد (numbers) هستند که خودشان به چند دسته تقسیم می شوند:
طبیعتا هر چه عدد انتخابی شما بزرگ تر باشد، مقدار حافظه ای که برای نگهداری آن لازم است، بیشتر خواهد شد.
نکته: درون Shell اعداد، float (اعشاری) هستند چرا که shell بر اساس جاوا اسکریپت است و جاوا اسکریپت بین integer و float تفاوتی قائل نیست. بنابراین همه اعداد به صورت 64 بیت در shell ذخیره می شود.
نوع داده دیگر ما ObjectId است که با ها آن را دیده ایم. این نوع داده در واقع یک رشته یکتا می سازد اما تفاوت اینجاست که این رشته های یکتا بر اساس زمان (timestamp) ساخته می شوند بنابراین اگر یک document را بعد از document دیگری بنویسید، رشته طوری تعریف می شود که ترتیب آن ها مشخص باشد. مثلا اولی afslh3095nldvlihds49a و دومی afslh3095nldvlihds49b خواهد بود (حرف b در الفبای انگلیسی بعد از b می آید).
نوع داده بعدی، ISODate است که مخصوص ذخیره تاریخ می باشد. البته نوعی از داده نیز بر اساس این نوع داده ساخته می شود که timestamp است. در نهایت دو نوع داده آخر embedded document ها و array ها (آرایه) هستند. این یک مرور کلی بر انواع داده در MongoDB بود. در قسمت های بعد و همینطور فصل های بعد به صورت تدریجی با این موارد کار خواهیم کرد تا به طور عملی متوجه آن ها و تفاوت هایشان بشوید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.