محتويات الدورة

MongoDB / الأساسي: أسس الوثائق / الدرس 1

خادم MongoDB والصدفة ووثائق BSON

حدد موضع استعلام الوثائق داخل بنية MongoDB، وميز الخادم والقاعدة والمجموعة والمشغل وmongosh قبل تفسير البيانات والاتصال.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • وصف حدود تخزين الوثائق والعملاء.
  • شرح هوية BSON وافتراضات المختبر الاصطناعي.

لقاعدة الوثائق حدود صريحة أيضاً

يخزن الخادم وثائق BSON في مجموعات داخل قواعد. mongosh عميل تفاعلي يعتمد JavaScript ويستخدم التطبيق مشغلاً مدعوماً؛ لا يصبح العميل محركاً لأن الصياغة تشبه JavaScript. تحفظ مجموعة النسخ تاريخاً مكرراً بينما توزع البنية المجزأة البيانات عبر التوجيه. تختلف الضمانات والميزات؛ حدد البنية ولا تفترض خادماً منفرداً أو قدرات Atlas متطابقة.

اقرأ الوثيقة قيمة ذات أنواع

للقيمة المحلية معرف عددي واسم نصي وعنوان مضمّن. الوصول بالنقطة هنا JavaScript لكائن محلي لا استعلام خادم، والمتوقع Box وAqaba بالاستدلال. سنميز مسار الاستعلام واسم الحقل والتعبير عن JavaScript. الأمثلة غير قابلة للتشغيل ولم ينشأ اتصال MongoDB أو Atlas أو نتيجة تنفيذ فعلية.

javascript mongosh توضيحية؛ النتائج المتوقعة مستنتجة وليست قياسات.
const parcel = { _id: 1, label: 'Box', destination: { city: 'Aqaba' } };
print(parcel.label);
print(parcel.destination.city);
الناتج المتوقع
Box
Aqaba

يوضح الكائن الشكل فقط، ويتطلب حفظه كتابة منفصلة محددة الهدف.

تحمل BSON أنواعاً لا تعبر عنها JSON العادية

BSON تمثيل ثنائي بأنواع ObjectId والتاريخ والبيانات الثنائية والأعداد وDecimal128. لا تحفظ JSON النصية كل ذلك دون اتفاق مثل Extended JSON. سلسلة محارف ObjectId ليست النوع نفسه. يمثل تاريخ BSON مللي ثانية منذ حقبة Unix لا اسم المنطقة الأصلية. افصل التصدير والتحويل والعرض حتى لا يغير الشكل المقروء النوع بصمت.

استهدف قاعدة التدريب صراحة

يسمي النمط quay_lab بدلاً من قاعدة الصدفة الحالية، ويطلب معرفاً ويعرض الاسم مع استبعاد _id. تعتمد النتيجة على عينة اصطناعية مجهزة، وقد تكون خالية دون فشل اتصال. المؤشر تسلسل نتائج لا تحميل فوري للمجموعة كلها. لا تمنح القراءة إذن التغيير.

javascript mongosh توضيحية؛ النتائج المتوقعة مستنتجة وليست قياسات.
db.getSiblingDB('quay_lab').parcels.find(
  { _id: 1 },
  { _id: 0, label: 1 }
);

لو حُفظت الوثيقة الاصطناعية السابقة منفصلة لكانت النتيجة { label: "Box" }؛ لم يحدث حفظ هنا.

الهوية ليست طابعاً زمنياً تجارياً

تحتاج الوثيقة العادية _id وغالباً يولد العميل ObjectId عند غيابه. يحوي زمناً ولا يعد ساعة حفظ عالمية أو وقت تسليم أو بديلاً لـ createdAt. استخدم معرفات مستقرة للتعادل والمراجع. ISODate وNumberDecimal مساعدات صدفة وللمشغل منشئات BSON الخاصة. افحص الخادم والصدفة والمشغل والبيئة وافصل Community عن إدارة Atlas.

الأخطاء الشائعة وإصلاحها

لا تطابق السلسلة السداسية ObjectId

لماذا يحدث؟
يختلف نوع المرشح عن المعرف المخزن.
كيف تصلحه؟
أنشئ ObjectId المقصودة بعد تحقق الصيغة.
كيف تتجنب تكراره؟
صرح بالأنواع عند API والتخزين.

يعيد الاستعلام بيانات قاعدة غير مقصودة

لماذا يحدث؟
اختلفت قاعدة العميل الافتراضية عن الهدف.
كيف تصلحه؟
افحص نطاق التدريب المصرح وحدده.
كيف تتجنب تكراره؟
سجل القاعدة والمجموعة مع المثال.

تفشل مساعدات الصدفة في JavaScript التطبيق

لماذا يحدث؟
عوملت منشئات mongosh كدوال لغة أصلية.
كيف تصلحه؟
استخدم أصناف BSON للمشغل والبيئة.
كيف تتجنب تكراره؟
ميز أمثلة الصدفة والمشغل.

اختبر فهمك

1. يستقبل API المعرف نصاً وتخزنه المجموعة ObjectId. ماذا تتحقق الحدود؟

اعرض الحل المشروح

تحقق من الصيغة والنطاق ثم حول بمنشئ المشغل. لا تفترض أن العرض يحفظ النوع. ارفض غير الصالح وميز المعرف الصحيح غير الموجود عن خطأ الشبكة أو المصادقة. لا يمنح التحويل صلاحية الوصول.

2. لماذا يرتب الإرسال بـ deliveredAt وكاسر ثابت بدلاً من ObjectId وحدها؟

اعرض الحل المشروح

ليس التوليد حدث التسليم أو ترتيب حفظ عاماً. احفظ اللحظة وحدد الغياب واستخدم معرفاً فريداً للتعادل. يبقى التقرير واضحاً عند اختلاف توليد العملاء أو الاستيراد التاريخي أو تحديث التسليم.

أهم ما تعلمته

  • شكل الوثيقة ونوع BSON وسياق الاتصال حقائق منفصلة.
  • صياغة الصدفة توضيحية وتحتاج الضمانات بنية محددة.

المراجع الرسمية