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

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

المرشحات والإسقاط والفرز وترقيم الصفحات

حدد الوثائق والحقول المطلوبة بدقة، واجمع المرشحات بأمان واختر مؤشرات مستقرة دون افتراض ترتيب المجموعة الطبيعي.

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

أهداف الدرس

  • تركيب شروط تراعي النوع وإسقاطات صحيحة.
  • استخدام فرز حتمي وقراءة مؤشرات محدودة.

افصل ترشيح الوثائق عن إسقاط الحقول

يختار المرشح الوثائق والإسقاط الحقول. يحد الإسقاط الحمولة ولا يعوض الصلاحيات؛ تبقى شروط النطاق لازمة. لا يضمن الإدخال ترتيباً دون sort ولا يجعل limit الجزء حتمياً. تحقق من القيم ضمن بنية استعلام معروفة ولا تقبل كائنات معاملات عشوائية؛ قد توسع JSON غير الموثوقة النطاق أو تحقن معاملات.

عبر عن الجزء والخرج المطلوبين

افترض الطرود 1 معلقاً برسم عشرين و2 مرسلاً بخمسين و3 معلقاً بثلاثين وكلها عددية. يعيد الاستعلام 3 ثم 1 ومعرفيهما ورسومهما. _id مقصودة للتعادل. لا يخلط الإدراج والاستبعاد العاديين عادة باستثناء _id. يمثل الخرج الوثائق منطقياً لا سجل مؤشر مقاس.

javascript mongosh توضيحية؛ النتائج المتوقعة مستنتجة وليست قياسات.
db.getSiblingDB('quay_lab').parcels.find(
  { state: 'pending', fee: { $gte: 20 } },
  { _id: 1, fee: 1 }
).sort({ fee: -1, _id: 1 });
الناتج المتوقع
{ _id: 3, fee: 30 }
{ _id: 1, fee: 20 }

يلزم الشرطان وفق العينة العددية المذكورة فقط.

اكتب المنطق والوجود بوضوح

تعني الحقول اقتراناً وتوضح $or و$and البدائل. قد يمحو تكرار مفتاح JavaScript شرطاً قبل الإرسال، فاجمع المعاملات أو استخدم $and. تحتاج null والغياب سياسة لا افتراض SQL. راجع السلب لأن $ne و$nin قد يشملان مجموعة واسعة قليلة الانتقائية.

استخدم مؤشراً يطابق مفتاح الفرز

لـ _id عددي متزايد يستخدم المؤشر آخر معرف بدلاً من skip متزايدة. إذا رتب createdAt و_id وجب تمثيل الاثنين وشرطهما المعجمي. قد تغير الكتابات الصفحات اللاحقة دون عقد لقطة أقوى؛ لا تعد المؤشر ضمان اتساق عاماً. حد النتائج وأغلق المؤشرات غير المستخدمة.

javascript mongosh توضيحية؛ النتائج المتوقعة مستنتجة وليست قياسات.
db.getSiblingDB('quay_lab').parcels.find(
  { _id: { $gt: 100 }, state: 'pending' },
  { _id: 1, state: 1 }
).sort({ _id: 1 }).limit(20);

تحتاج العينة معرفاً عددياً متزايداً؛ لـ ObjectId أو الفرز المركب حد مطابق خاص.

يتبع الفرز قواعد BSON والترتيب

لمقارنة BSON ترتيب عبر الأنواع وللمصفوفة دلالة خاصة. لا تستخدم صياغة PostgreSQL NULLS FIRST أو LAST. وحد الأنواع وحدد الغياب بدل إعطاء الترتيب المختلط معنى تجارياً. قد يخدم الفهرس المرشح والفرز، ويحد limit الخرج لا الفحص كله. افحص الخطة وتجنب افتراض كفاءة تعبير نمطي واسع.

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

يفقد المرشح شرط حقل مكرر بصمت

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

يرفض الإسقاط خلط الإدراج والاستبعاد

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

تكرر الصفحات وثائق متعادلة

لماذا يحدث؟
يفتقد الفرز أو المؤشر مكوناً فريداً مستقراً.
كيف تصلحه؟
استخدم ترتيباً كلياً ومؤشراً بكل مكوناته.
كيف تتجنب تكراره؟
اختبر التعادل والتغيير المتزامن.

اختبر فهمك

1. يعلن الكائن fee مرتين مع $gte ثم $lte. لماذا يفشل قبل تقييم MongoDB؟

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

يحتفظ JavaScript عادة بآخر تكرار فيختفي حد. استخدم { fee: { $gte: 10, $lte: 20 } } أو اقتراناً صحيحاً. اختبر الشكل النهائي ولا تفترض بقاء السطرين.

2. يحتاج الرد label وcity دون _id. ما نمط الإسقاط؟

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

أدرج المطلوب مع _id: 0 مثل { label: 1, "destination.city": 1, _id: 0 }. هذا الاستثناء المعتاد. أكد الشكل المضمن وأبقِ نطاق الوصول منفصلاً؛ إخفاء المعرف لا يجيز بيانات مستأجر آخر.

أهم ما تعلمته

  • بنية المرشح والإسقاط والترتيب عقود منفصلة.
  • يجب أن يطابق المؤشر النوع وكل مكونات الترتيب.

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