همه چیز در مورد ساختار ObjectId در MongoDB



visibility  
mode_comment   ۲

همه چیز در مورد ساختار ObjectId در MongoDBدر این مقاله میخوام اطلاعات کاملی در مورد ساختار ObjectId در MongoDB رو در اختیارتون قرار بدم تا بدونین که MongoDB چطور و چگونه از از این ویژگی استفاده میکنه.

کلاس ObjectId کلید اصلی پیش‌فرض برای document های MongoDB هست و معمولا در ویژگی _id اسناد یا document هایی که اضافه میشن، قرار داده میشه. مثال زیر رو ببینید:

ساختار ObjectId

یک Object در MongoDB یک BSON Type با اندازه 12 بایت هست. این ObjectId ها با یک الگوریتم پیش فرض توسط MongoDB ساخته میشن که در ادامه در مورد اون توضیح میدم. یک ObjectId با اندازه 12 بایت شامل موارد زیر هست:

متخصص جاوا اسکریپت
با جاوا اسکریپت جادوگری کنید! آیا می دونید با زبان جاوااسکریپت می تونید، برای فرانت اند و بک اند وبسایت ها برنامه نویسی کنید؟ همینطور اپلیکیشن دسکتاپ و موبایل بسازید؟ اگر دوست داری اینکارها رو انجام بدی و React, ElectronJS, ReactNative, NodeJS,MongoDB و ... رو تو یه دوره یاد بگیری، متخصص جاوااسکریپت سون لرن رو حتما ببین : متخصص جاوا اسکریپت arrow_back
  • 4 بایت اول تعداد ثانیه‌های گذشته از Unix epoch یا 1 ژانویه 1970 میلادی رو نشون میده.
  • 3 بایت بعد مشخص کننده شناسه دستگاه یا machine identifier می‌باشد.
  • 2 بایت بعد مشخص کننده process id سیستم هست
  • 3 بایت نهایی از یک عدد تصادفی شروع میشه و زیاد میشه.

این 12 بایت در کنار یکدیگر یک مقدار یکتا رو به وجود میارن که MongoDB از اون برای _id هر document استفاده میشه. برای تست کردن این مورد در ابتدا بسته mongodb رو نصب میکنیم. برای اینکار بصورت زیر عمل میکنیم:

حالا در command line یا محیط nodejs کدهای زیر رو اجرا میکنم:

با اینکار 12 بایت مورد نظر ساخته میشه و به شما کد هگزادسیمال اون نشون داده میشه. کدی که به من نشون داده میشه، 5c24ebb6cfdabe1fa85ffaba هست که اگر شما این کار رو انجام بدین، کد متفاوتی رو خواهید دید. شما همچنین میتونین 12 بایت مورد نظرتون رو به کلاس ObjectId پاس بدین، تا با کلید مورد نظرتون ساخته بشه. برای اینکار بصورت زیر عمل میکنیم:

با اینکار مقدار 616161616161616161616161 که هگزادسیمال مربوط به aaaaaaaaaaaa هست به شما نمایش داده میشه.

چگونه در MongoDB برای document ها ObjectId تولید کنیم؟

جواب این سوال خیلی ساده هست. زمانی که شما در MongoDB یک یا چند document جدید رو به وجود میارید، خود MongoDB بصورت پیش‌فرض برای ویژگی _id اونا یک ObjectId رو قرار میده که همه اونا Unique و یکتا هستند. مثلا یک document بصورت زیر قرار میدیم:

همونطور که میبینید insertedId که مربوط به document قرار داده شده هست، نمایش داده میشه.

حالا با استفاده از find میتونین همه document هایی که درون users هستند رو ببینید. بصورت زیر:

میبینید که ObjectId مورد نظر در ویژگی _id قرار داده شده است. زمانی که با استفاده از دستور insert یا save مواردی رو در MongoDB قرار میدین، اگر ویژگی _id رو مشخص نکنید، خود MongoDB بصورت اتوماتیک یک ObjectId یکتا رو تولید میکنه و برای هر ویژگی _id مربوط به هر document قرار میده.

بدست آوردن timestamp مربوط به ObjectId

همونطور که در بالا هم گفته شد، 4 بایت ابتدایی مربوط به ObjectId، زمان بعد از Unix time رو نشون میده. با استفاده از متد getTimestamp میتونین این 4 بایت رو خروجی بگیرید و زمان رو ببینید. برای اینکار بصورت زیر عمل میکنیم:

همونطور که میبینید تاریخ با فرمت ISO نمایش داده میشه.

تبدیل کردن ObjectId به رشته

برای اینکه بتونین ObjectId رو به رشته تبدیل کنید و از اون در جاهایی که نیاز دارید استفاده کنید، میتونین از ویژگی str استفاده کنید. برای اینکار بصورت زیر عمل میکنیم:

همونطور که مشاهده کردید با این روش به رشته مورد نظر دسترسی پیدا کردیم و میتونیم از اون استفاده کنیم.

comment دیدگاه کاربران

یعنی این جاوا اسکریپت همه فن حریفه 😐

محمد اسفندیاری

بله همینطوره در همه زمینه‌ها میتونین از Javascript استفاده کنید

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.