مفتاح MongoDB الأساسي: مثال لتعيين حقل _id باستخدام ObjectId()
⚡ ملخص ذكي
MongoDB المفتاح الأساسي هو حقل _id الذي يُعرّف كل مستند في المجموعة بشكل فريد. يحتوي افتراضيًا على معرّف كائن مُنشأ تلقائيًا، ولكن يمكنك أيضًا تعيين قيمة خاصة بك لحقل _id عند إدراج مستند.
ما هو المفتاح الأساسي في MongoDB?
In MongoDB، حقل _id هو المفتاح الأساسي للمجموعة بحيث يمكن تحديد كل مستند بشكل فريد في المجموعة. يحتوي الحقل _id على قيمة ObjectID فريدة.
بشكل افتراضي عند إدراج المستندات في المجموعة، إذا لم تقم بإضافة اسم حقل مع _id في اسم الحقل، ثم MongoDB سيضيف تلقائيًا حقل معرف الكائن كما هو موضح أدناه
عندما تقوم بالاستعلام عن المستندات الموجودة في مجموعة، يمكنك رؤية ObjectId لكل مستند في المجموعة.
إذا كنت تريد التأكد من ذلك MongoDB لا يقوم بإنشاء حقل _id عند إنشاء المجموعة وإذا كنت تريد تحديد المعرف الخاص بك باعتباره _id للمجموعة، فأنت بحاجة إلى تحديد هذا بشكل صريح أثناء إنشاء المجموعة.
عند إنشاء حقل معرف بشكل صريح، يجب إنشاؤه باستخدام _id في اسمه.
دعونا نلقي نظرة على مثال حول كيف يمكننا تحقيق ذلك.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code التفسير:
- نحن نفترض أننا نقوم بإنشاء المستند الأول في المجموعة، وبالتالي في العبارة أعلاه أثناء إنشاء المجموعة، قمنا بتعريف الحقل _id بشكل واضح وحدد قيمة له.
إذا تم تنفيذ الأمر بنجاح واستخدمت الآن أمر البحث لعرض المستندات في المجموعة، فسيتم عرض الناتج التالي
الإخراج:
يُظهر الإخراج بوضوح أن حقل _id الذي حددناه أثناء إنشاء المجموعة يُستخدم الآن كمفتاح أساسي للمجموعة.
ما هو ObjectId في MongoDB?
يُعد ObjectId نوع القيمة الافتراضي الذي MongoDB يُعيّن هذا المعرّف للمفتاح الأساسي _id. وهو معرّفٌ مكوّن من 12 بايت، مصمّم ليكون فريدًا عالميًا عبر الخوادم والمجموعات، لذا نادرًا ما يحصل مستندان على القيمة نفسها. ولأن برنامج تشغيل العميل يستطيع إنشاء ObjectId دون طلب ذلك من الخادم، MongoDB يمكن إدخال المستندات بسرعة والتوسع عبر العديد من الأجهزة دون الحاجة إلى عداد مركزي.
يُخزَّن كل معرّف كائن (ObjectId) بصيغة ثنائية مضغوطة، ولكنه يُعرض كسلسلة سداسية عشرية مكونة من 24 حرفًا، على سبيل المثال ObjectId(“507f1f77bcf86cd799439011”). تعتمد البايتات الأولى على الوقت الحالي، مما يعني أن القيم تزداد تدريجيًا مع إنشاء المستندات. هذا يجعل معرّف الكائن فريدًا، كما يُتيح إمكانية فرزه تقريبًا حسب ترتيب الإدخال، وهي خاصية مفيدة عند الرغبة في عرض أحدث السجلات أو أقدمها أولًا.
هيكل MongoDB معرف الكائن
A MongoDB يبلغ طول معرّف الكائن 12 بايتًا بالضبط، ولكل جزء منه معنى محدد. يساعد فهم البنية على تفسير سبب كون معرّفات الكائنات فريدة ومرتبة زمنيًا.
- الطابع الزمني المكون من 4 بايت: عدد الثواني منذ بداية حقبة يونكس، مسجلاً وقت إنشاء معرّف الكائن. وهذا يجعل المعرّفات قابلة للفرز حسب الوقت.
- قيمة عشوائية مكونة من 5 بايت: يتم إنشاء قيمة مرة واحدة لكل عملية، تجمع بين هوية الجهاز وهوية العملية، بحيث ينتج العملاء المختلفون معرفات مختلفة.
- عداد متزايد مكون من 3 بايت: عداد يبدأ من قيمة عشوائية ويزداد مع كل معرف كائن جديد في نفس الثانية، مما يمنع التصادمات أثناء عمليات الإدخال السريعة.
تضمن هذه الأجزاء الثلاثة مجتمعةً أن يكون كل معرّف كائن فريدًا، حتى عند إدراج العديد من المستندات في نفس اللحظة عبر خوادم مختلفة. يمكنك قراءة وقت الإنشاء المضمن في أي وقت عن طريق استدعاء دالة getTimestamp() على معرّف الكائن.
مزايا استخدام ObjectId كمفتاح أساسي
يوفر استخدام معرّف الكائن الافتراضي كمفتاح أساسي لـ _id العديد من المزايا العملية، ولهذا السبب يستخدمه معظم MongoDB تعتمد المجموعات عليه:
- التوليد التلقائي: لست بحاجة إلى إنشاء أو إدارة القيم الرئيسية بنفسك، مما يقلل من فرصة وجود مفاتيح مكررة.
- التفرد العالمي: تظل معرفات الكائنات فريدة عبر الخوادم، لذا فهي تعمل بشكل جيد في عمليات النشر الموزعة والمجزأة.
- الطابع الزمني المدمج: يتيح لك وقت الإنشاء المضمن فرز المستندات أو تصفيتها حسب العمر دون الحاجة إلى حقل تاريخ إضافي.
- أداء عالي: يُجنّب توليد البيانات من جانب العميل الحاجة إلى إرسال البيانات إلى الخادم ذهابًا وإيابًا، مما يُحافظ على...ping يتم إدخالها بسرعة.
على الرغم من أن ObjectId مناسب لمعظم التطبيقات، إلا أنه لا يزال بإمكانك اختيار _id مخصص، مثل عنوان بريد إلكتروني أو رمز منتج، عندما يُسهّل مفتاح العمل الطبيعي الاستعلامات. يعتمد الاختيار الأمثل على كيفية تخطيطك للبحث عن بياناتك وربطها.



