MongoDB، یکی از محبوب‌ترین موتورهای پایگاه داده NoSQL است. مقیاس‌پذیر بودن، قدرتمند بودن، قابل اعتماد بودن و راحتی کار با آن، جزو ویژگی‌های بارز این ابزار پایگاه داده است. در این مقاله، نحوه import کردن و export کردن پایگاه داده MongoDB برای شما شرح داده شده است.

 

منظور از import و export کردن، عملیاتی است که در آن، داده‌ها به فرمت قابل خواندن توسط انسان تبدیل می‌شوند؛ بگونه‌ای که با سایر محصولات نرم افزاری سازگار باشند. در مقابل، عملیات پشتیبان گیری و بازیابی، داده‌های باینری خاص MongoDB را ایجاد یا استفاده می‌کند که قوام و یکپارچگی داده‌های شما و همچنین ویژگی‌های خاص MongoDB آن را حفظ می‌نماید. بنابراین، برای انتقال معمولاً استفاده از نسخه پشتیبان و بازیابی ترجیح داده می‌شود، به شرطی که سیستم‌های مبدأ و مقصد سازگار باشند.

دقت کنید که قبل از دنبال کردن این آموزش، به موارد زیر نیاز دارید:

  • یک Ubuntu 20.04 Droplet؛ شامل یک کاربر  غیر root با امتیازات sudo و یک فایروال.
  • یک MongoDB نصب و پیکربندی شده.
  • آشنایی با تفاوت بین داده‌های JSON و BSON در MongoDB.

 

مرحله 1 - وارد کردن اطلاعات در MongoDB

به منظور یادگیری نحوه وارد کردن اطلاعات در MongoDB، در این آموزش از یک نمونه پایگاه داده MongoDB در مورد رستوران‌ها استفاده شده است. این نمونه پایگاه داده با فرمت .json است و با استفاده از wget بصورت زیر قابل بارگیری است:

wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

پس از اتمام بارگیری، باید یک فایل به نام primer-dataset.json (اندازه 12 مگابایت) در دایرکتوری کنونی داشته باشید. اکنون بیایید داده‌ها را از این فایل به یک پایگاه داده جدید به نام newdb و به collectionای به نام رستوران وارد کنیم.

بدین منظور، از دستور mongoimport بصورت زیر استفاده نمایید:

sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

نتیجه به این شکل خواهد بود:

output:
2020-11-11T19:37:55.607+0000    connected to: mongodb://localhost/
2020-11-11T19:37:57.841+0000    25359 document(s) imported successfully. 0 document(s) failed to import

همانطور که دستور بالا نشان می‌دهد، 25359 داکیومنت وارد شده است. از آنجا که پایگاه داده‌ای به نام newdb نداشتیم، MongoDB آن را به صورت خودکار ایجاد کرد.

 

این مطلب نیز ممکن است برای شما مفید باشد: نصب MongoDB برروی اوبونتو 20.04

 

اکنون باید import را تأیید کنید.

بدین منظور، به پایگاه داده newdb تازه ایجاد شده متصل شوید:

sudo mongo newdb

شما اکنون به نمونه پایگاه داده newdb متصل شده‌اید. توجه داشته باشید که کاربر ترمینال شما باید تغییر کند که این نشان دهنده اتصال شما به پایگاه داده است.

تعداد داکیومنت‌های موجود در collection رستوران‌ها، با دستور زیر بدست می‌آید:

> db.restaurants.count()

نتیجه، عدد 25359 را نشان می‌دهد که تعداد داکیومنت‌های وارد شده است. برای یک بررسی بهتر می‌توانید، اولین داکیومنت را از collection رستوران‌ها بصورت زیر انتخاب نمایید:

> db.restaurants.findOne()

 

نتیجه به این شکل خواهد بود:

[secondary label Output]
{
    "_id" : ObjectId("5fac3d937f12c471b3f26733"),
    "address" : {
        "building" : "1007",
        "coord" : [
            -73.856077,
            40.848447
        ],
        "street" : "Morris Park Ave",
        "zipcode" : "10462"
    },
    "borough" : "Bronx",
    "cuisine" : "Bakery",
    "grades" : [
        {
            "date" : ISODate("2014-03-03T00:00:00Z"),
            "grade" : "A",
            "score" : 2
        },
...
    ],
    "name" : "Morris Park Bake Shop",
    "restaurant_id" : "30075445"
}

همانطور که در خروجی مشاهده می‌کنید، قالب json از رمزگذاری UTF-8 استفاده می‌کند و فایل‌های import و export شده به آن، باید در آن فرمت رمزگذاری شده باشند. چنانچه فایل‌های json را به صورت دستی ویرایش می‌کنید، باید این مورد را در ذهن داشته باشید. در غیر این صورت، MongoDB به طور خودکار آن را برای شما اداره می‌کند.

برای خارج شدن از نشست مربوط به MongoDB، دستور exit را در ترمینال تایپ نمایید:

> exit

با این کار، به خط فرمان عادی خود و با عنوان کاربر غیر root برگردانده خواهید شد.

 

این مطلب نیز ممکن است برای شما مفید باشد: بارگیری و نصب MongoDB در ویندوز

 

مرحله 2 – export کردن اطلاعات از MongoDB

همانطور که قبلاً اشاره کردیم، با export کردن اطلاعات MongoDB می‌توانید یک فایل متنی قابل خواندن را به همراه داده‌های خود بدست آورید. به طور پیش فرض، اطلاعات در قالب json از پایگاه داده استخراج می‌شوند؛ اما شما می‌توانید به فرمت csv (جدا شده با کاما) نیز export نمایید.

برای استخراج اطلاعات از MongoDB، از دستور mongoexport استفاده کنید. این دستور به شما امکان می‌دهد، داده‌ها را با اطلاعات بسیار دقیق استخراج نمایید تا بتوانید یک پایگاه داده، یک collection، یک field را تعیین کرده و حتی از یک کوئری برای استخراج آن استفاده نمایید.

یک مثال ساده mongoexport، استخراج collection رستوران‌ها از پایگاه داده newdb است. این همان پایگاه داده‌ای است که قبلاً به MongoDB وارد کرده‌ایم. بدین منظور می‌توانید از دستور زیر استفاده نمایید:

sudo mongoexport --db newdb -c restaurants --out newdbexport.json

در دستور بالا، از db-- برای تعیین پایگاه داده، c- برای collection و out-- برای فایلی که داده‌ها در آن ذخیره می‌شوند، استفاده شده است.

خروجی یک دستور mongoexport موفق باید به شکل زیر باشد:

output:
2020-11-11T19:39:57.595+0000    connected to: mongodb://localhost/
2020-11-11T19:39:58.619+0000    [###############.........]  newdb.restaurants  16000/25359  (63.1%)
2020-11-11T19:39:58.871+0000    [########################]  newdb.restaurants  25359/25359  (100.0%)
2020-11-11T19:39:58.871+0000    exported 25359 records

 

خروجی فوق نشان می‌دهد که 25359 داکیومنت import شده است (همان تعداد اسناد که در مرحله قبل مشاهده کردیم).

در برخی موارد ممکن است لازم باشد، تنها بخشی از collection خود را export کنید. در این صورت، اگر بخواهید این اطلاعات را مستقیماً هنگام اتصال به MongoDB دریافت نمایید، مجدداً باید به پایگاه داده متصل شوید:

sudo mongo newdb

سپس باید از یک کوئری بصورت زیر استفاده کنید:

> db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )

درکوئری بالا، همه رستوران‌هایی که مکان آن‌ها در منطقه Bronx قرار داشته و دارای نوع غذاهای Chinese هستند، استخراج می‌شوند.

بنابراین، نتایج در ترمینال بصورت زیر نمایش داده می‌شود:

Output:
Output2020-12-03T01:35:25.366+0000    connected to: mongodb://localhost/
2020-12-03T01:35:25.410+0000    exported 323 records

برای خارج شدن از نشست MongoDB، مجدداً دستور exit را تایپ نمایید:

> exit

 

این مطلب نیز ممکن است برای شما مفید باشد: درون و برون ریزی پایگاه داده و تنظیم مجدد رمز عبور در Mysql

 

چنانچه می‌خواهید داده‌ها را از یک خط فرمان sudo به جای اتصال به پایگاه داده استخراج کنید، در دستور monoexport، با استفاده از گزنیه q-، کوئری خود را بصورت زیر وارد نمایید.

sudo mongoexport --db newdb -c restaurants -q "{\"borough\": \"Bronx\", \"cuisine\": \"Chinese\"}" --out Bronx_Chinese_retaurants.json

توجه داشته باشید که کاراکتر “ و دیگر کاراکترهای خاص در کوئری باید به همراه کاراکتر بک اسلش (\) استفاده شوند تا در جستجو به خود آن کاراکترها تبدیل شوند.

چنانچه استخراج موفقیت آمیز شود، نتیجه بصورت زیر نمایش داده خواهد شد:

output:
2020-11-11T19:49:21.727+0000    connected to: mongodb://localhost/
2020-11-11T19:49:21.765+0000    exported 323 records

موارد بالا نشان می‌دهد که 323 رکورد استخراج شده است و شما می‌توانید آن‌ها را در فایل Bronx_Chinese_retrors.json که قبلاً تعیین کرده‌ایم، پیدا کنید.

دقت کنید که به منظور اسکن داده‌ها می‌توانید، از دستور cat و less استفاده نمایید:

cat Bronx_Chinese_retaurants.json | less

از SPACE نیز می‌توانید به منظور صفحه‌بندی داده‌ها استفاده کنید:

    date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],

    . . .

در انتها، q را فشار دهید تا از آن خارج شوید.

 

 

 

منبع:

digitalocean