تا اینجای کار به خوبی با گزینه های مهم mongod آشنا شده ایم و flag های مهم آن را نیز بررسی کرده ایم. البته برخی از Flag ها باقی مانده است (مانند موارد TLS و authentication) که در فصل های جداگانه خودشان بررسی خواهند شد اما موضوع اصلی امروز فایل config.cfg است. برای شروع به documentation رسمی این فایل می رویم:
https://docs.mongodb.com/manual/reference/configuration-options/
این فایل تمام تنظیمات سرور ما را در خود ذخیره می کند تا مجبور نباشیم هر بار برای راه اندازی سرور از Flag های مختلف استفاده کنیم. مثلا اگر می خواهیم با هر بار اجرای سرور تنظیمات خاصی داشته باشیم (مثلا همیشه fork برای کاربران مک و لینوکس اجرا شود یا همیشه storageEngine خاصی فعال باشد) آن تنظیمات و Flag ها را درون این فایل ذخیره می کنیم و آن ها در هنگام اجرای سرور به صورت خودکار اعمال خواهند شد.
مسیر این فایل برای کاربران سیستم های عامل مختلف متفاوت است:
توجه داشته باشید که اگر این فایل را در مسیر پیش فرض دریافت نکرده اید باید خودتان آن را بسازید. همچنین مسیر ساختن این فایل مهم نیست و به جای استفاده از مسیر های بالا می توانید از هر مسیر دیگری نیز استفاده نمایید.
این فایل معمولا کمی بهم ریخته است بنابراین بهتر است به جای notepad یا ویرایشگر های ساده از VSCode یا Notepad++ استفاده نمایید. اگر یادتان باشد در جلسات اول با این فایل کار کردیم و dbpath خود را در آن تنظیم نمودیم:
# Where and how to store data. storage: dbPath: C:\data\db journal: enabled: true # engine: # mmapv1: # wiredTiger:
البته در همین فایل می توانیم مقادیر پیش فرض دیگری را نیز مشاهده کنیم:
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: C:\data\db journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: C:\Program Files\MongoDB\Server\4.2\log\mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 #processManagement: #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp:
یعنی مسیر پیش فرض فایل log برای من روی C:\Program Files\MongoDB\Server\4.2\log\mongod.log قرار گرفته است. همچنین logAppend فعال (true) است که یعنی محتوای جدید log، محتوای قبلی آن را حذف نکند بلکه در انتهای محتوای قبلی اضافه شود. در قسمت net هم می توانیم port را ببینیم که به صورت پیش فرض روی 27017 است (البته ممکن است برای شما فرق کند). شما می توانید با مراجعه به documentation رسمی، تمام گزینه های این فایل را بررسی نمایید.
این فایل بر اساس استاندارد YAML کار می کند، بنابراین نمی توانید از tab استفاده کنید و برای indentation (تو رفتگی کد ها) حتما باید از space استفاده نمایید. در خود وب سایت MongoDB یک مثال از این فایل قرار داده شده است که با محتویات آن کاری نداریم اما آن را برایتان قرار می دهم تا ببینید که تمام indentation ها با اسپیس ایجاد شده اند:
systemLog: verbosity: <int> quiet: <boolean> traceAllExceptions: <boolean> syslogFacility: <string> path: <string> logAppend: <boolean> logRotate: <string> destination: <string> timeStampFormat: <string> component: accessControl: verbosity: <int> command: verbosity: <int> # COMMENT additional component verbosity settings omitted for brevity
بنابراین محتویات داخل آن چیزی به غیر از همان Flag ها و تنظیمات معمول نیست. سوال بعدی ما این است که چطور به MongoDB بفهمانیم که برای راه اندازی سرور از این فایل استفاده کند؟ برای این کار هنگام اجرای دستور mongod از flag ای به نام config استفاده می کنیم:
mongod --config C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg
البته حالت خلاصه آن نیز به شکل زیر است:
mongod -f C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg
هر کدام از دستورات بالا را که اجرا کنید، mongod از فایل پیکربندی شما برای راه اندازی سرور استفاده می کند. اگر فایل پیکربندی خود را در مسیر دیگری قرار داده اید باید به جای مسیر بالا، آن مسیر را تایپ کنید. ما در طول این دوره در مورد تنظیمات مختلفی صحبت خواهیم کرد و شما می توانید این تنظیمات را درون این فایل پیاده سازی کنید تا با هر بار راه اندازی سرور، راحت باشید.
تنظیماتی که تا این قسمت بررسی کردیم، سراسری بود اما می خواهم تنظیمات خاصی را نیز بررسی کنیم که فقط مربوط به shell است. برای این کار می گوییم:
mongo --help
توجه کنید که کد بالا mongod نیست بلکه mongo است. با اجرای این کد، تنظیمات مخصوص shell نمایش داده می شوند. یکی از این گزینه ها nodb-- است که اگر اجرا شود (به شکل mongo --nodb) برای کار با shell نیازی به پایگاه داده نخواهیم داشت. قبلا هم گفتم که shell بر اساس جاوا اسکریپت نوشته شده است بنابراین اگر می خواهید کد های جاوا اسکریپت بنویسید که به پایگاه داده ربطی ندارد می توانید از nodb-- استفاده کنید.
گزینه quiet را نیز مثل حالت عادی داریم که باعث می شود پیام های کمتری در ترمینال داشته باشیم. همچنین port-- و host-- را داریم که با استفاده از آن می توانیم پرت و هاست خود را مشخص کنیم. در حالت پیش فرض از localhost:27017 استفاده می شود اما اگر سروری واقعی دارید (مثلا از یک شرکت میزبانی سرور اجاره کرده اید) می توانید با وارد کردن آدرس و پرت خود وارد سرور خود شوید و کدهایتان را در آن اجرا کنید (در انتهای این دوره این کار را خواهیم کرد). سرور شما حتما دارای رمز و نام کاربری است بنابراین u- و p- را داریم که به ترتیب مخفف username و password هستند و می توانید با استفاده از آن ها نام کاربری و رمز عبور خود را مشخص کنید.
نکته جالب دیگری نیز وجود دارد. اگر به جای mongo --help بگویید mogo تا وارد shell شوید و سپس عبارت help را به عنوان یک دستور جداگانه تایپ کنید، لیستی از دستورات مهم shell را دریافت خواهید کرد که با برخی از آن ها آشنا هستیم:
// بقیه دستورات // 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 // بقیه دستورات //
همچنین اگر بخواهیم دستورات مربوط به یک database خاص را ببینیم باید وارد آن database بشویم. مثلا:
use test
سپس می گوییم:
db.help()
با اجرای این دستور، لیستی از دستورات موجود برای این پایگاه داده به شما داده می شود. همچنین برای مشاهده دستورات مربوط به یک collection خاص باید وارد آن collection بشویم:
db.collection.help()
باز هم با اجرای این دستور، لیست بالا و بلندی از انواع دستورات موجود را مشاهده خواهید کرد. به احتمال بسیار زیاد هیچ وقت از اکثر این دستورات استفاده نخواهیم کرد اما خوب است که به آن ها دسترسی داریم و خوب است که بدانیم این دستورات در documentation رسمی توضیح داده شده اند.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.