مقدمه
سیستم های پایگاه داده مانند MongoDB معمولاً با یک برنامه کاربردی خارجی استفاده می شود که به سرور پایگاه داده متصل می شود و عملیات هایی مانند خواندن و پردازش داده ها یا نوشتن ورودی های جدید را انجام می دهد. در مواردی مانند این، شما مستقیماً با سرور پایگاه داده در تعامل نیستید. برای انجام وظایف مدیریتی در پایگاه داده یا اجرای پرس و جوهای پایگاه داده موقت، ممکن است دسترسی مستقیم مورد نیاز باشد.
اینجاست که پوسته MongoDB وارد میشود. پوسته MongoDB یک کنسول تعاملی است که میتوانید از آن برای اتصال به سرور پایگاه داده و اجرای دستورات روی آن استفاده کنید، و به شما امکان میدهد وظایف مدیریتی را انجام دهید و مستقیماً دادهها را بخوانید، بنویسید یا دستکاری کنید. پوسته MongoDB شما را قادر می سازد از طریق خط فرمان به پایگاه داده متصل شوید و به صورت تعاملی از پنجره ترمینال با آن کار کنید. همچنین به شما امکان می دهد اسکریپت های خارجی را برای انجام کارهای تکراری با راحتی بیشتر اجرا کنید.
در این آموزش، شما از پوسته MongoDB برای اتصال به پایگاه داده MongoDB و پرس و جو از پایگاه داده به صورت تعاملی استفاده خواهید کرد. همچنین از سیستم کمک داخلی و ویژگی های تکمیل خودکار موجود در پوسته استفاده خواهید کرد.
پیش نیازها
- سروری با کاربر معمولی و غیر روت با امتیازات sudo و فایروال پیکربندی شده با UFW. این آموزش با استفاده از سروری که اوبونتو 20.04 را اجرا می کند تأیید شده است
- MongoDB installed on your server.
- نمونه MongoDB سرور شما با فعال کردن احراز هویت و ایجاد یک کاربر مدیریتی ایمن می شود.
توجه: آموزش های مرتبط در مورد نحوه پیکربندی سرور، نصب و سپس نصب امن MongoDB به Ubuntu 20.04 مراجعه می کند. این آموزش بر روی خود MongoDB متمرکز است، نه سیستم عامل اصلی. تا زمانی که احراز هویت فعال باشد، به طور کلی با هر نصب MongoDB بدون توجه به سیستم عامل کار می کند.
مرحله 1 – اتصال به سرور MongoDB
برای باز کردن پوسته MongoDB، دستور mongo را از اعلان سرور خود اجرا کنید. بهطور پیشفرض، دستور mongo پوستهای را باز میکند که به یک نمونه MongoDB نصبشده محلی در پورت ۲۷۰۱۷ اجرا میشود.
دستور mongo را بدون هیچ پارامتر اضافی اجرا کنید:
mongo
این یک پیام خوشامدگویی با برخی اطلاعات در مورد سروری که پوسته به آن متصل است و همچنین نسخه MongoDB نصب شده را چاپ می کند. مثال زیر نشان می دهد که سرور MongoDB بر روی 127.0.0.1 (یک رابط حلقه بک نشان دهنده میزبان محلی) در پورت پیش فرض MongoDB (27017) و نسخه 4.4.6 اجرا می شود.
Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6
سعی کنید تمام پایگاه های داده موجود در سرور را فهرست کنید. بعد از دستور shell عبارت show dbs را تایپ کرده و ENTER را فشار دهید:
show dbs
با فرض اینکه آموزش پیش نیازی در مورد How To Secure MongoDB را دنبال کرده اید، این دستور هیچ خروجی را بر نمی گرداند. دلیل این امر این است که، حتی با وجود اینکه سرور MongoDB در حال اجرا است و پوسته قادر به اتصال به آن بود، شما هیچ اطلاعات احراز هویت ارائه نکردید. به همین دلیل، شما هیچ حق دسترسی برای کار با هیچ یک از پایگاه داده های سرور ندارید و دستور show dbs چیزی را بر نمی گرداند.
با تایپ کردن دستور زیر خارج شوید:
exit
پوسته Mongo پیام خداحافظی مختصری را چاپ می کند و شما را به پوسته سیستم باز می گرداند:
Output
bye
توجه: به جای تایپ دستور خروج، یک راه جایگزین برای بستن پوسته این است که به جای آن، CTRL + C را فشار دهید.
اکنون پوسته MongoDB را دوباره به سرور پایگاه داده متصل کنید، اما این بار یک نام کاربری و رمز عبور برای احراز هویت مناسب در نمونه MongoDB خود ارائه دهید. برای انجام این کار، باید پارامترهای خط فرمان اضافی را مانند مثال زیر ارائه دهید:
mongo -u AdminSammy -p --authenticationDatabase admin
این دستور از چند قسمت تشکیل شده است:
- -u: این پرچم نام کاربری مورد استفاده برای احراز هویت را در سرور MongoDB تنظیم می کند.
- -p: این پرچم به پوسته MongoDB می گوید که هنگام اتصال به پایگاه داده از رمز عبور استفاده کند. پس از فشار دادن ENTER، از شما خواسته می شود که یک رمز عبور در پنجره ترمینال ارائه دهید.
- –authenticationDatabase: این گزینه پایگاه داده احراز هویت کاربری را که با آن وارد می شوید مشخص می کند. به طور معمول، حساب های مدیریتی در پایگاه داده مدیریت مدیریت می شوند، اما اگر پایگاه داده احراز هویت کاربر شما متفاوت است، آن پایگاه داده را به جای admin وارد کنید.
توجه: برای اتصال به یک سرور MongoDB که روی ماشینی متفاوت از لوکال هاست اجرا می شود، می توانید پرچم -h و سپس آدرس IP سرور خود را به دستور پوسته اضافه کنید.
رمز عبور تنظیم شده در حین نصب را وارد کنید و یک بار دیگر به پوسته دسترسی خواهید داشت.
حالا یک بار دیگر دستور show dbs را اجرا کنید:
show dbs
این بار، دستور فهرستی از تمام پایگاه های داده موجود در سیستم را برمی گرداند:
Output
admin 0.000GB
config 0.000GB
local 0.000GB
از آنجا که شما به عنوان یک کاربر ممتاز احراز هویت شده اید، پوسته به شما اجازه می دهد تا دستورات را در هر یک از این پایگاه داده ها اجرا کنید.
اکنون که با استفاده از پوسته MongoDB با موفقیت به سرور MongoDB متصل شده اید، می توانید به یادگیری نحوه اجرای دستورات در پوسته بروید.
مرحله 2 – اجرای دستورات
همانند سایر رابط های خط فرمان، پوسته MongoDB دستورات را می پذیرد و نتایج مورد نظر را به خروجی استاندارد برمی گرداند. همانطور که قبلا ذکر شد، در پوسته MongoDB، تمام دستورات در خط فرمان که با علامت بزرگتر از (>) نشان داده شده است تایپ می شوند. با زدن ENTER بعد از دستور بلافاصله آن را اجرا کرده و خروجی فرمان را به صفحه باز می گرداند.
اکثر دستورات در پایگاه داده MongoDB بر روی یک پایگاه داده یا مجموعه ای در یک پایگاه داده انتخاب شده اجرا می شوند. پایگاه داده انتخاب شده در حال حاضر توسط شی db قابل دسترسی از طریق پوسته نمایش داده می شود. می توانید با تایپ db در پوسته بررسی کنید که کدام پایگاه داده در حال حاضر انتخاب شده است:
db
در یک نمونه پوسته تازه متصل، پایگاه داده انتخاب شده همیشه test نامیده می شود:
Output
test
می توانید با خیال راحت از این پایگاه داده برای آزمایش MongoDB و پوسته MongoDB استفاده کنید. برای جابهجایی به پایگاه داده دیگر، میتوانید دستور use را اجرا کنید و نام پایگاه داده جدید را دنبال کنید. سعی کنید به پایگاه داده ای به نام میوه جابجا شوید:
use fruits
پوسته به شما اطلاع می دهد که اکنون از پایگاه داده جدید استفاده می کنید:
Output
switched to db fruits
میتوانید این را با تایپ مجدد db تأیید کنید تا نام پایگاه داده انتخاب شده فعلی را پیدا کنید:
db
این بار، خروجی پایگاه داده جدید را منعکس می کند:
Output
fruits
توجه داشته باشید که به صراحت پایگاه داده میوه ها را ایجاد نکرده اید. MongoDB به شما اجازه می دهد تا دستورات را روی پایگاه داده ها و مجموعه هایی که هنوز وجود ندارند اجرا کنید. تنها زمانی این ساختارها را ایجاد می کند که یک شی برای اولین بار در آنها وارد شود. حتی اگر با موفقیت پایگاه داده فعلی را به میوه تغییر دهید، این پایگاه داده هنوز وجود ندارد.
سعی کنید این پایگاه داده را با قرار دادن یک شی در آن ایجاد کنید. مثال زیر نحوه درج یک شی را در مجموعه ای در پایگاه داده به نام apples توضیح می دهد. با افزودن این شی، عملیات هم پایگاه داده میوه ها و هم مجموعه سیب ها را ایجاد می کند.
خط زیر را در پوسته MongoDB تایپ کرده و ENTER را فشار دهید. به نام مجموعه برجسته (apples) توجه کنید:
db.apples.insert()
با فشار دادن ENTER بعد از پرانتز باز، یک خط فرمان چند خطی شروع می شود و به شما امکان می دهد دستورات طولانی تر را در بیش از یک خط وارد کنید. دستور insert تا زمانی که یک پرانتز بسته را وارد نکنید کامل ثبت نمی شود. تا زمانی که این کار را نکنید، اعلان از علامت بزرگتر به بیضی (…) تغییر می کند.
نیازی نیست دستورات MongoDB را به چندین خط مانند این تقسیم کنید، اما انجام این کار میتواند خواندن و درک دستورات طولانی را آسانتر کند.
در خط بعدی، شی را در یک جفت براکت ({ و }) وارد کنید. این سند نمونه فقط یک جفت فیلد و مقدار دارد:
{name: 'Red Delicious'}
هنگامی که یک بار دیگر ENTER را فشار دهید، خط دیگری نشان داده میشود که به شما امکان میدهد پارامترهای فرمان بیشتری را اضافه کنید، مانند سایر اسناد یا هر مشخصاتی که توسط روش درج MongoDB مجاز است. اما برای این مثال، میتوانید ورودی خود را پایان دهید و با وارد کردن پرانتز بسته و فشردن ENTER، عملیات را اجرا کنید.
این بار، پوسته Mongo پایان دستور insert را ثبت می کند و کل دستور را اجرا می کند.
Output
WriteResult({ "nInserted" : 1 })
پس از درج این شی جدید در پایگاه داده، هم پایگاه داده میوه ها و هم مجموعه سیب وجود خواهند داشت. لیست پایگاه های داده موجود را با دستور show dbs بررسی کنید:
show dbs
مجدداً، لیستی از تمام پایگاه های داده موجود را برمی گرداند، اما این بار لیست شامل پایگاه داده میوه ها می شود:
Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GB
برای بازیابی لیستی از مجموعه های موجود در پایگاه داده انتخاب شده فعلی، دستور show collections مفید است:
show collections
از آنجایی که پایگاه داده میوه ها انتخاب شده است، فقط مجموعه سیب های تازه ایجاد شده را برمی گرداند:
Output
apples
با این کار، نحوه اجرای دستورات را در پوسته MongoDB یاد گرفتید. شما همچنین یک شی نمونه ایجاد کردید، که به نوبه خود یک پایگاه داده جدید و یک مجموعه جدید ایجاد کرد که اکنون در سرور وجود دارد.
در مرحله آخر این راهنما، یاد خواهید گرفت که چگونه ویژگی های کمکی پوسته MongoDB را برای درک بهتر دستورات و اجرای آنها با سهولت بیشتری فراخوانی کنید.
مرحله 3 – دریافت کمک تعاملی از پوسته
پوسته MongoDB دارای یک سیستم کمک داخلی است که می توانید از آن برای دریافت اطلاعات در مورد دستورات موجود سیستم پایگاه داده و اشیاء ذخیره شده در آن استفاده کنید. این صفحه راهنمای مقدماتی را می توان با دستور help مستقیماً در اعلان پوسته مشاهده کرد:
help
پوسته MongoDB لیستی از ورودی های راهنمای دقیق تر را که می توانید برای اطلاعات بیشتر در مورد بخش های خاص پوسته استفاده کنید و همچنین با چند نمونه از متداول ترین دستورات استفاده می شود، برمی گرداند:
Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
دو ورودی اول که در خروجی این مثال برجسته شدهاند، نحوه اجرای دستور کمکی را به ترتیب برای پایگاه داده فعلی و مجموعهای در پایگاه داده فعلی نشان میدهند. نام مجموعه نمونه داده شده mycoll است، اما می توان از هر نام مجموعه معتبری استفاده کرد.
آخرین خط برجسته – db.mycoll.find() – نمونه ای از یک روش برای بازیابی یک شی از یک مجموعه با استفاده از دستور find است که اشیاء را در یک مجموعه مشخص لیست می کند. از آنجایی که مجموعه ها برخی از متداول ترین ساختارهای مورد استفاده در پایگاه داده Mongo هستند، در این مرحله نحوه استفاده از روش های سطح مجموعه () find و help() Mongo را بررسی خواهیم کرد.
ابتدا، برای یافتن دستورات موجود برای این مجموعه، به صفحه راهنمای مجموعه apples دسترسی پیدا کنید:
db.apples.help()
نکته: در حالی که دستور help اولیه فقط help بود، هنگام اجرای یک متد کمکی روی پایگاه داده و اشیاء مجموعه، باید دستور را با یک جفت پرانتز دنبال کنید تا به عنوان help() خوانده شود و نه فقط help.
خروجی این دستور فهرست طولانی از دستورات موجود است که می توانید در مجموعه apples انجام دهید:
Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .
علاوه بر فهرست خالص دستورات موجود که میتوانید در مجموعه db.apples اجرا کنید (که هر کدام با توضیحات کوتاهی در مورد عملکرد دستور داده شده دنبال میشوند)، این صفحه راهنما همچنین نمونههایی از استفاده از دستورات پرکاربرد مانند find را ارائه میکند. ().
این سیستم کمک همراه به عنوان یک مرجع مفید از دستورات موجود عمل می کند. در صورتی که املای دقیق یا قسمت های قابل قبول یک دستور را به خاطر نمی آورید، می توانید از آن برای بررسی نحو خود استفاده کنید.
از آنجایی که قبلاً از صفحههای راهنما آموختهاید که find() میتواند برای بازیابی اشیاء از یک مجموعه استفاده شود، اکنون میتوانید شیء ایجاد شده در مجموعه apples را در مرحله قبل بازیابی کنید.
با این حال، این مثال یکی دیگر از کمکهای کمکی تعاملی MongoDB را که به عنوان تکمیل فرمان شناخته میشود، برجسته میکند. پوسته MongoDB از الگوی موجود در پوسته های محبوب دیگر مانند Bash یا zsh پیروی می کند که در آن فشار دادن کلید TAB صفحه کلید به طور خودکار هر دستوری را که در فرآیند تایپ هستید تکمیل می کند.
با تایپ کردن موارد زیر شروع کنید، اما هنوز ENTER را فشار ندهید:
db.a
به جای تایپ کامل نام مجموعه، کلید TAB را روی صفحه کلید فشار دهید. پوسته MongoDB با لیستی از تمام احتمالات موجود پاسخ می دهد که با عبارت زیر شروع می شود:
Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(
این خروجی سه دستور را فهرست می کند که با پرانتز باز نشان داده می شوند و همچنین مجموعه apples.
یک حرف دیگر در Shell تایپ کنید:
db.ap
یک بار دیگر TAB را فشار دهید. این بار، هیچ امکان دیگری برای شروع با ap وجود ندارد و پوسته MongoDB به طور خودکار ورودی را تکمیل می کند و db.apples را برای شما تایپ می کند. همین اصل را دنبال کنید و دستور find() را با استفاده از تکمیل TAB تکمیل کنید. fi را تایپ کنید اما ENTER را فشار ندهید:
db.apples.fi
با فشار دادن TAB نام فرمان به صورت خودکار به db.apples.find تکمیل می شود. در این مرحله، فشار دادن مجدد TAB باعث می شود پوسته احتمالات بیشتری را فهرست کند، اما می توانید به صورت دستی یک پرانتز بسته برای اجرای دستور find اضافه کنید:
db.apples.find()
پوسته لیستی از تمام اشیاء موجود در مجموعه سیب را نشان می دهد. تنها یک شی وجود خواهد داشت، همان چیزی که قبلاً وارد کرده اید:
Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }
نتیجه
با مطالعه این مقاله با پوسته MongoDB آشنا خواهید شد. پوسته امکان درج اشیاء جدید در پایگاه داده، پرس و جو از مجموعه های موجود و انجام وظایف اداری برای مدیریت پایگاه داده، داده های آن و کاربران آن را فراهم می کند.