Mohammad Jawad Barati
Mohammad Jawad Barati
خواندن ۲ دقیقه·۴ سال پیش

داستان های من و MongoDB

برداشت اول؛ صحنه اول. ور رفتن به کانکشن استرینگ

فرمت connection string توی مانگو
فرمت connection string توی مانگو

برای اینکه بتونی اپتو به مانگو دی بی بوصلی میتونی از کتابخونه هایی که توسط خود مانگو دی بی maintain میشن استفاده بکنی. داک خود مانگو بهشون driver میگه. ما هم بهشون درایور میگیم. درایور نود.جی‌اسی مانگو دی بی promise base هست و اسم پکیج اون mongodb هست. داکشم اینجاست.

دو روش connection string نوشتن

فرمت استاندارد connection string

برای متصل شدن به مانگو دی بی شما باید یه همچین چیزی داشته باشی:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

حالا بیاید هر بخش رو ببینیم چیه:

این بخش (mongodb://) مشخص کننده این موضوع هست که این یه connection string هست.

بخش (username:password@) آپشنال هست. برای احراز هویت به کار میره. اگه نام کاربری و پسورد رو مشخص بکنی و بیای authSource رو هم مشخص بکنی میاد کاربر رو authenticate میکنه. ولی اگه authSource رو مشخص نکرده باشی میاد از defaultauthdb استفاده میکنه. دلیل استفاده از @ هم اینه که تو URI اومدی نام کاربری و رمز عبور رو برای احراز هویت قرار دادی. پس اگه نام کاربری و رمز عبور نخوای ارائه بدی میتونی این بخشو از توی connection string حذف کنی.

بخش host:port داره میگه به کدوم هوست و کدوم پورت اون وصل بشم (البته ارائه پورت الزامی نیست). بجای host میتونی یه hostname، آدرس IP یا UNIX domain socket بدی. راستی اینم بگم که اگه میخوای چند تا hostname مشخص بکنی باید از replica set و sharded cluster استفاده بکنی. اگرم پورت رو مشخص نکنی مقدار پیشفرضش در نظر گرفته میشه: ۲۷۰۱۷

بخش defaultauthdb مشخص کننده دیتابیسی هست که برای authentication استفاده میشه. وقتی این بخش رو مشخص کردی که authSource رو مشخص نکردی. اگرم هر دو بخش رو نذاری میاد توی ادمینا دنبال اون کاربر و رمز عبورش میگرده.

بخش query string از دو قسمت تشکیل شده name (وقتی از درایور استفاده می‌کنی case insensitive هست) و value (در همه شرایط case sensitive هست).

  • کوئری استرینگ ها زیادن.
  • برای اینکه مشخص بکنی که بعد از چند میلی ثانیه بیاد time out بده از connectTimeoutMS استفاده می‌کنی.
  • برای اینکه مشخص بکنی که بعد از چند میلی ثانیه بیاد time out بده از socketTimeoutMS استفاده می‌کنی.
  • توی authSource میای دیتابیس authentication رو مشخص میکنی.
  • توی authMechanism میای مکانیزم احراز هویت رو مشخص می‌کنی. مقادیر ممکنه اون ایناست (SCRAM-SHA-1 ،SCRAM-SHA-256، MONGODB-X509، MONGODB-AWS، GSSAPI و PLAIN)
  • توی retryWrites میای مشخص می‌کنی که دوباره تلاش بکنه یا نه.

فرمت DNS Seed List Connection

رفرنس


برداشت اول؛ صحنه دوم. اشتباهات/ندانسته های من

  • خیلی ها وقتی با مانگوس کار میکنن خیال میکنن وقتی که کانکشن استرینگ رو توی متد connect بنویسی خودش دیتابیس رو ایجاد میکنه ولی از یه موضوع قافل میشن. اونم اینه که تا توی اون دیتابیس داکیومنتی ننویسی، دیتابیست ایجاد نمیشه.
require('mongoose').connect(process.env.MONGODB_URI, { useCreateIndex: true, useNewUrlParser: true, useUnifiedTopology: true }); // database won't create until you insert the first document in it


mongodbnode jsmongoose
برنانه نویس، مدرس، محقق. عاشق انیمه هستم و دنبال چالش ها جدید.
شاید از این پست‌ها خوشتان بیاید