- بواسطة x32x01 ||
بعد ما اتكلمنا عن UUID، ULID، Snowflake ID، و KSUID، هنتكلم عن MongoDB ObjectId، وده الـ identifier الافتراضي اللي بيستخدمه MongoDB لأي document بيتخزن جوا collection.
ObjectId بيتكون من إيه؟
الـ ObjectId متقسم لأربع حاجات أساسية:
شكل ObjectId وكيف بيتخزن
مثال على ObjectId:
مميزات ObjectId
عيوب ObjectId
ليه ObjectId بقي مهم جدًا في MongoDB
مثال عملي: استخدام ObjectId في MongoDB مع Node.js
الكود ده بيوريك إزاي MongoDB يولّد ObjectId تلقائي لأي document جديد.
الخلاصة
الـ MongoDB ObjectId هو الحل المثالي لأي مشروع محتاج unique ID مرتب، بحجم صغير، وسهل التخزين داخل MongoDB.
مع إنه مش readable للبشر وبيعتمد على server clock، لكنه عملي جدًا وبيخلي إدارة البيانات أسرع وأضمن.
ObjectId بيتكون من إيه؟
الـ ObjectId متقسم لأربع حاجات أساسية:- Timestamp بالثواني

ده بيخلي الـ IDs شبه مرتبة زمنيًا، يعني تقدر تعرف ترتيب ال documents حسب الوقت. - Machine Identifier

بيميز السيرفر أو الجهاز اللي ولّد الـ ID، وده مهم في distributed systems. - Process ID

بيربط الـ ID بالعملية أو الـ process اللي شغالة وقت توليده. - Counter

بيت increment عشان يضمن uniqueness حتى لو كل الأجزاء اللي فوق اتكررت.
شكل ObjectId وكيف بيتخزن
مثال على ObjectId: 507f1f77bcf86cd799439011- الـ ObjectId عبارة عن 24 character hex string (يعني 12 byte).
- الـ 4 bytes الأولى للـ timestamp، والباقي بيتوزع حسب machine ID، process ID، و counter.
مميزات ObjectId
- توليد تلقائي
الـ IDs بتتولد أوتوماتيك من غير أي configuration. - مرتبة شبه زمنيًا

يعني تقدر تفرز documents حسب الـ ObjectId نفسه من غير ما تحتاج timestamp إضافي. - حجم أصغر من UUID

12 byte بدل 16 byte، وده بيخلي التخزين أسرع والـ indexing كمان أسرع. - Randomness كويسة

تمنع أي collision حتى لو النظام متوزع. - متكاملة مع MongoDB بالكامل

الـ drivers الرسمية بتدعمها بدون أي مشاكل.
عيوب ObjectId
- مش standard خارج MongoDB

لو هتنقل البيانات لنظام تاني ممكن تحتاج تحوّل الـ ObjectId. - مش readable للبشر

بعكس ULID أو KSUID اللي سهلة القراءة والفهم. - بيعتمد على clock السيرفر

أي لخبطة في الوقت ممكن تأثر على ترتيب الـ IDs.
ليه ObjectId بقي مهم جدًا في MongoDB
- ObjectId بقى واحد من أكتر identifiers استخدامًا بفضل الانتشار الكبير لـ MongoDB.
- بيوفر balance بين: الحجم الصغير، ordering، و uniqueness.
- عشان كده، ObjectId بقي العمود الفقري لأي مشروع شغال بـ MongoDB.
مثال عملي: استخدام ObjectId في MongoDB مع Node.js
JavaScript:
const { MongoClient, ObjectId } = require('mongodb');
async function run() {
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const db = client.db('mydatabase');
const collection = db.collection('users');
// إنشاء Document جديد
const result = await collection.insertOne({
name: 'Mostafa',
email: 'mostafa@example.com'
});
console.log('Inserted ID:', result.insertedId); // ObjectId تلقائي
}
run(); الخلاصة
الـ MongoDB ObjectId هو الحل المثالي لأي مشروع محتاج unique ID مرتب، بحجم صغير، وسهل التخزين داخل MongoDB.مع إنه مش readable للبشر وبيعتمد على server clock، لكنه عملي جدًا وبيخلي إدارة البيانات أسرع وأضمن.