$slice (إسقاط جزء من المصفوفة)
آخر تحديث: 2026-10-09
$slice (إسقاط جزء من المصفوفة)
يُرجع $slice في الإسقاط جزءًا من حقل مصفوفة دون تعديل المستند. فالعبارة `{ tags: { $slice: 2 } }` تُرجع أول عنصرين؛ و`{ tags: { $slice: [1, 3] } }` تتخطى 1 وتأخذ 3. شائع لصفحات القوائم التي تعرض أول تعليقات أو مرفقات قليلة. يتشارك الاسم مع معدِّل التحديث $slice، لكنه يخدم غرضًا مختلفًا.
| الفئة | الإسقاط |
|---|---|
| إصدار MongoDB | 2.4+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ <array field>: { $slice: <count> } } or { <array field>: { $slice: [ <skip>, <count> ] } }
⚙️ المعلمات
| حقل مصفوفة | حقل المصفوفة المراد تقطيعه. |
|---|---|
| عدد أو مصفوفة | عدد لأول N عنصر، أو [skip, count] للتخطي ثم الأخذ. |
القيمة المرجعة:مستندات مُسقَطة مع المجموعة الفرعية المطلوبة من المصفوفة
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $slice: إرجاع أول 3 وسوم فقط
db.articles.find(
{ _id: 1 },
{ title: 1, tags: { $slice: 3 } }
)
// تخطي 1 وأخذ 2
db.articles.find(
{ _id: 1 },
{ comments: { $slice: [1, 2] } }
)
المخرجات:
// يُرجع العنوان وأول 3 وسوم؛ الاستعلام الثاني يتخطى تعليقًا واحدًا ويأخذ 2
📌 ملاحظات
- يؤثر على الإسقاط فقط، ولا يمس المستند المصدر أبدًا
- وسيط واحد يأخذ أول N؛ وسيطان يعنيان [skip, count]
- نفس اسم معدِّل التحديث $slice، بدور مختلف
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل $slice في الإسقاط هو نفسه $slice في التحديث؟
Aلا. يشكّل $slice في الإسقاط النتيجة؛ بينما يحدّ $slice في التحديث طول المصفوفة بعد $push.
Qكيف آخذ آخر عناصر مصفوفة؟
Aاستخدم قيمة سالبة: { tags: { $slice: -3 } } يأخذ آخر 3.
Qهل يمكن لـ $slice الدمج مع إسقاطات أخرى؟
Aنعم، ما دامت لا تتعارض.