MongoDB ObjectId কী?

একটি MongoDB ObjectId হলো একটি 12-বাইট (24 হেক্স অক্ষর) অনন্য শনাক্তকারী, যা MongoDB কালেকশনের প্রতিটি ডকুমেন্টের ডিফল্ট _id ফিল্ড হিসেবে ব্যবহৃত হয়। এর গঠন এলোমেলো নয় — এটি অর্থবহ তথ্য এনকোড করে। প্রথম চারটি বাইট একটি Unix টাইমস্ট্যাম্প সংরক্ষণ করে যা ObjectId তৈরির সেকেন্ডটি নির্দেশ করে। বাকি বাইটগুলোতে একটি র‍্যান্ডম মান এবং একটি ক্রমবর্ধমান কাউন্টার থাকে, যা একই মেশিনে একই সেকেন্ডে একাধিক ডকুমেন্ট ইনসার্ট করা হলেও অনন্যতা নিশ্চিত করে।

যেহেতু তৈরির টাইমস্ট্যাম্প সরাসরি শনাক্তকারীর মধ্যে এমবেড করা থাকে, তাই আলাদা createdAt ফিল্ড সংরক্ষণ না করেও আপনি ঠিক কখন একটি ডকুমেন্ট তৈরি হয়েছিল তা নির্ধারণ করতে পারবেন।

টাইমস্ট্যাম্প কীভাবে এমবেড করা হয়

507f1f77bcf86cd799439011 এর মতো একটি ObjectId নিম্নরূপে বিভক্ত হয়:

বাইট হেক্স অক্ষর উদ্দেশ্য
১–৪ 507f1f77 Unix টাইমস্ট্যাম্প (epoch থেকে সেকেন্ড)
৫–৯ bcf86cd799 র‍্যান্ডম মান (প্রতি মেশিন/প্রসেসে অনন্য)
১০–১২ 439011 ক্রমবর্ধমান কাউন্টার

প্রথম আটটি হেক্স অক্ষর 507f1f77 কে দশমিকে রূপান্তর করলে 1350844279 পাওয়া যায়, যা 2012-10-21T21:17:59.000Z এর সাথে সামঞ্জস্যপূর্ণ।

টুলের বিবরণ

এই টুলটি যেকোনো বৈধ MongoDB ObjectId থেকে এমবেড করা টাইমস্ট্যাম্প বের করে এবং একাধিক তারিখ ফরম্যাটে প্রদর্শন করে। একটি ObjectId পেস্ট করুন এবং তাৎক্ষণিকভাবে ISO 8601 তারিখ, UTC তারিখ, স্থানীয় তারিখ এবং raw Unix টাইমস্ট্যাম্প দেখুন — কোনো ডেটাবেস সংযোগ বা কোড প্রয়োজন নেই।

উদাহরণ

ইনপুট ObjectId বের করা তারিখ (UTC)
507f1f77bcf86cd799439011 2012-10-21T21:17:59.000Z
65a1fc2b0000000000000000 2024-01-13T04:44:27.000Z
000000000000000000000000 1970-01-01T00:00:00.000Z

বৈশিষ্ট্যসমূহ

  • তাৎক্ষণিক নিষ্কাশন: টাইপ করার সাথে সাথে ফলাফল দেখা যায় — কোনো বাটন ক্লিকের প্রয়োজন নেই
  • একাধিক ফরম্যাট: ISO 8601, UTC, স্থানীয় তারিখ/সময় এবং Unix টাইমস্ট্যাম্প প্রদর্শন করে
  • ইনপুট যাচাইকরণ: বৈধ 24-অক্ষরের হেক্স string নয় এমন যেকোনো কিছু প্রত্যাখ্যান করে
  • কোনো নির্ভরতা নেই: কোনো সার্ভার কল বা বাহ্যিক লাইব্রেরি ছাড়াই সম্পূর্ণ ব্রাউজারে চলে
  • কপি-প্রস্তুত আউটপুট: প্রতিটি আউটপুট ফিল্ড আলাদাভাবে কপি করা যায়

ব্যবহারের ক্ষেত্র

  • Debugging: ডেটাবেস কোয়েরি না করেই দ্রুত পরীক্ষা করুন কখন একটি ডকুমেন্ট ইনসার্ট হয়েছিল
  • অডিটিং: এক্সপোর্ট করা ObjectId তালিকা বা লগ ফাইলে তৈরির টাইমস্ট্যাম্প যাচাই করুন
  • ফরেনসিক্স: ডেটা মাইগ্রেশন বা ঘটনা তদন্তের সময় রেকর্ডের বয়স নির্ধারণ করুন

এটি কীভাবে কাজ করে

  1. টুলটি ObjectId-এর প্রথম 8টি হেক্স অক্ষর নেয়।
  2. Unix টাইমস্ট্যাম্প সেকেন্ডে পেতে সেগুলোকে 32-বিট big-endian হেক্সাডেসিমাল পূর্ণসংখ্যা হিসেবে পার্স করে।
  3. 1000 দিয়ে গুণ করে এবং একটি JavaScript Date অবজেক্টে পাঠায়।
  4. ফলাফল তারিখটিকে ISO 8601, UTC string, locale-সচেতন string এবং raw সেকেন্ডে ফরম্যাট করে।

সীমাবদ্ধতা

  • শুধুমাত্র তৈরির টাইমস্ট্যাম্প বের করা হয়। ObjectId-এর র‍্যান্ডম এবং কাউন্টার অংশগুলো ডিকোড করা হয় না কারণ সেগুলো ব্যবহারকারীর জন্য অর্থবহ ডেটা বহন করে না।
  • কাস্টম বা শূন্য টাইমস্ট্যাম্প দিয়ে তৈরি ObjectId একটি বৈধ কিন্তু সম্ভাব্য বিভ্রান্তিকর তারিখ ফেরত দেবে।
  • স্থানীয় তারিখ ফরম্যাট আপনার ব্রাউজারের locale সেটিংসের উপর নির্ভর করে।

সাধারণ জিজ্ঞাসা

আমি কি যেকোনো MongoDB ObjectId থেকে তারিখ বের করতে পারি? হ্যাঁ। প্রতিটি স্ট্যান্ডার্ড MongoDB ObjectId — MongoDB driver, Mongoose, mongosh, বা Faker.js-এর মতো টুল দ্বারা তৈরি হোক না কেন — এর প্রথম চারটি বাইটে একটি বৈধ টাইমস্ট্যাম্প থাকে।

এটি কি createdAt ফিল্ডের মতো একই? শুধুমাত্র তখনই, যদি ObjectId ইনসার্টের সময় তৈরি হয়ে থাকে (ডিফল্ট)। যদি ম্যানুয়ালি একটি কাস্টম ObjectId সরবরাহ করা হয়, তাহলে এমবেড করা টাইমস্ট্যাম্প প্রকৃত তৈরির সময় থেকে আলাদা হতে পারে।

এটি কি পুরানো MongoDB সংস্করণের ObjectId-এর সাথে কাজ করে? হ্যাঁ। 4-বাইট টাইমস্ট্যাম্প প্রিফিক্স MongoDB-এর প্রাথমিক রিলিজ থেকেই ObjectId স্পেসিফিকেশনের অংশ। সময়ের সাথে শুধুমাত্র মধ্যবর্তী বাইটগুলোতে পরিবর্তন হয়েছে (মেশিন ID বনাম র‍্যান্ডম মান), যা এই টুলটি ডিকোড করে না।