نکات جزئی و توضیحات CRUD

CRUD Details

MongoDB: نکات جزئی و توضیحات CRUD (قسمت 06)

در قسمت قبل با نحوه راه اندازی MongoDB آشنا شدیم و حالا باید جلوتر برویم. برای شروع باید از اشیاء JSON یک یادآوری داشته باشیم:

[
  {
    "departureAirport": "MUC",
    "arrivalAirport": "SFO",
    "aircraft": "Airbus A380",
    "distance": 12000,
    "intercontinental": true
  },
  {
    "departureAirport": "LHR",
    "arrivalAirport": "TXL",
    "aircraft": "Airbus A320",
    "distance": 950,
    "intercontinental": false
  }
]

آرایه بالا حاوی دو شیء JSON است که حاوی اطلاعات دو پرواز خاص هستند (ساختار اشیاء JSON دقیقا به همین شکل است). یعنی جفت های key: value به صورتی که key ها (یا همان name ها) دارای double quotation هستند اما این مسئله برای value ها به نوع داده هایشان مرتبط است. ما برای رشته ها از double quotation استفاده می کنیم اما برای اعداد و مقادیر Boolean چنین کاری را انجام نمی دهیم.

بگذارید یک پایگاه داده جدید به نام flights بسازیم. برای این کار باید دستور زیر را اجرا کنیم:

use flights

از آنجایی که هنوز پایگاه داده ای به نام flights وجود ندارد، خود MongoDB آن را به صورت خودکار برایمان می سازد. به این روش ساخت پایگاه های داده implicit creation (ساخت غیر مستقیم) می گوییم. سپس می گوییم:

db.flightData.insertOne()

هنوز نباید این کد را اجرا کنید. من شیء اول از آرایه بالا را انتخاب کرده و درون آن قرار می دهم:

db.flightData.insertOne({"departureAirport": "MUC", "arrivalAirport": "SFO", "aircraft": "Airbus A380", "distance": 12000, "intercontinental": true})

همانطور که از قسمت قبل یاد گرفتیم می توانیم از find برای نمایش آن استفاده کنیم:

db.flightData.find().pretty()

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

        "_id" : ObjectId("5e82de3aba557900a236a04c"),
        "departureAirport" : "MUC",
        "arrivalAirport" : "SFO",
        "aircraft" : "Airbus A380",
        "distance" : 12000,
        "intercontinental" : true

در خروجی بالا فیلد id_ به صورت خودکار اضافه شده است. همچنین ObjectId یک data type یا نوع داده خاص است که در MongoDB استفاده می شود.  اگر دقت کنید قرار بود همه کد های ما به صورت JSON ذخیره شود، مگر نه؟ اما اگر به ObjectId نگاه کنید به سادگی می فهمید که این نوشتار (syntax) در JSON معتبر نیست. چرا؟ به دلیل اینکه مقادیر ما باید در رشته قرار بگیرند و داشتن یک شکل تابع مانند غلط است. نکته ای که در کد بالا وجود دارد این است که ما داده ها را به صورت JSON پاس داده ایم اما آن ها در پس زمینه به صورت BSON ذخیره می شوند. یعنی به کد binary (دودویی) تبدیل می شوند:

تفاوت JSON و BSON
تفاوت JSON و BSON

همانطور که می بینید driver ها هستند که داده های ما را تبدیل به داده های باینری می کنند. این کار دو مزیت اصلی دارد:

  • فضای کمتری گرفته و سریع تر هستند.
  • نوع داده های بسیار بیشتری از JSON عادی دارند. مثلا عددی که اعشار داشته باشد با عدد غیر اعشاری تفاوت دارد و الی آخر. این مسئله خیلی برای ما مهم نیست چرا که ما فقط با JSON عادی کار می کنیم اما این دانستن این مسئله به عنوان توسعه دهنده واجب است.

نکته بعدی این است که id_ تولید شده توسط MongoDB بسیار طولانی است و ممکن است شما از آن خوشتان نیاید و بخواهید id های خودتان را ذخیره کنید. این کار کاملا ممکن است. مثلا می گوییم:

db.flightData.insertOne({departureAirport: "TXL", arrivalAirport: "LHR", _id: "txl-1hr-1"})

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

البته id_ باید یکتا باشد، یعنی اگر یک ردیف داده دیگر با همین آیدی (txl-1hr-1) ثبت کنم، خطایی به من داده می شود که این id_ قبلا وجود داشته است.

CRUD چیست؟

اگر شما یک تحلیل گر داده باشید، اگر یک توسعه دهنده وب باشید، اگر ادمین زیرساخت یک شرکت باشید یا هر سمت دیگری که داشته باشید، تمام عملیات های ممکن با پایگاه داده از چهار حالت خارج نیست:

  • می خواهید داده هایی جدیدی را در پایگاه داده ثبت کنید (عملیات Create یا ایجاد داده).
  • می خواهید داده هایی را که قبلا ثبت شده است، از پایگاه داده دریافت کرده و بخوانید (عملیات Read یا خواندن داده).
  • می خواهید داده هایی را که قبلا ثبت شده است، ویرایش کرده و تغییر دهید (عملیات Update یا به روز رسانی داده ها).
  • می خواهید داده هایی را که قبلا ثبت شده است، حذف کنید (عملیات Delete یا حذف داده ها).

حرف اول تمام این عملیات ها (Create و Read و Update و Delete) همان CRUD است، یعنی چهار عمل اصلی کار با داده ها. من مهم ترین متد های موجود در هر کدام از این عملیات ها را برایتان لیست می کنم.

دستورات مهم در عملیات Create:

  • دستور insertOne که یک document را به collection خاصی اضافه می کند. البته این متد تنظیماتی را به عنوان پارامتر دوم قبول می کند که بعدا در مورد آن صحبت خواهیم کرد.
  • دستور InsertMany نیز چندین document را به collection مورد نظر شما اضافه می کند. این دستور نیز تنظیماتی را دارد که بعدا بررسی می کنیم.

دستورات مهم در عملیات Read:

  • find که داده هایی را از collection مورد نظر برای ما پیدا می کند. این دستور دو آرگومان (filter و options) می گیرد اما فعلا ما از آن ها استفاده نکرده ایم. جزئیات این آرگومان ها را بعدا بررسی می کنیم.
  • findOne دقیقا مانند find است با این تفاوت که فقط یک document را برمی گرداند (اولین document ای که بر اساس شرط شما پیدا کند).

دستورات مهم در عملیات Update:

  • updateOne که فقط یک document را ویرایش می کند (اولین document ای که بر اساس شرط شما پیدا کند).
  • updateMany که هر تعداد document ای را که بر اساس شرط شما پیدا کرده باشد، به روز رسانی خواهد کرد.
  • replaceOne که یک document را به طور کل با یک document جدید، عوض می کند (قبلی حذف شده و سند جدید به جای آن قرار می گیرد).

دستورات مهم در عملیات Delete:

  • deleteOne که فقط یک document را حذف می کند (اولین document پیدا شده بر اساس شرط شما).
  • deleteMany که هر تعداد document پیدا شده بر اساس شرط شما را حذف خواهد کرد.

خلاصه تمام این دستورات را در تصویر زیر می بینید:

متد های مهم مربوط به چهار عملیات اصلی CRUD
متد های مهم مربوط به چهار عملیات اصلی CRUD
تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری دوره جامع آموزش MongoDB توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

مقالات مرتبط
آخرین سوالات کاربران
5451218 در 3 سال قبل پرسیده:
ما را دنبال کنید
اینستاگرام روکسو تلگرام روکسو ایمیل و خبرنامه روکسو