$slice (تحديد طول المصفوفة عند التحديث)
آخر تحديث: 2026-10-09
$slice (تحديد طول المصفوفة عند التحديث)
يحدّ $slice كمعدِّل تحديث طول مصفوفة بعد $push. فالعبارة `{ $push: { log: { $each: [msg], $slice: -10 } } }` تُبقي أحدث 10 إدخالات فقط. القيم السالبة تقصّ من النهاية، والموجبة من البداية. مقترنًا بـ $each ينشئ سجلًا متدحرجًا — نفس اسم $slice في الإسقاط لكن بدور مختلف.
| الفئة | معدّل التحديث |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $push: { <array field>: { $each: [ <value> ], $slice: <count> } } }
⚙️ المعلمات
| حقل مصفوفة | حقل المصفوفة المراد تحديده. |
|---|---|
| عدد | العدد المراد الإبقاء عليه؛ القيمة السالبة تُبقي من النهاية. |
القيمة المرجعة:نتيجة التحديث
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $slice: الإبقاء على آخر 10 إدخالات سجل
// -10 يُبقي 10 من النهاية
db.devices.updateOne(
{ _id: 1 },
{ $push: { log: { $each: ['boot ok'], $slice: -10 } } }
)
المخرجات:
// بعد الإلحاق، يُقصّ log إلى آخر 10 إدخالات
📌 ملاحظات
- يجب استخدامه مع $each داخل $push
- السالب يُبقي من النهاية؛ الموجب من البداية
- نفس اسم $slice في الإسقاط، بدور مختلف
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل $slice في التحديث هو نفسه $slice في الإسقاط؟
Aلا. يقصّ $slice في التحديث المصفوفة؛ بينما يشكّل $slice في الإسقاط النتائج فقط.
Qماذا تعني $slice: -10؟
Aالإبقاء على 10 إدخالات من النهاية، منشئًا سجلًا متدحرجًا.
Qهل يجب إقران $slice بـ $each؟
Aنعم، منذ MongoDB 5.0 يعمل $slice مع $each فقط.