$project (الإسقاط)

آخر تحديث: 2026-10-09

$project (الإسقاط)

$project هو مرحلة الإسقاط: يختار الحقول أو يستبعدها أو يحسب حقولًا جديدة، معينًا كل مستند بشكلًا جديدًا. وعلى خلاف $addFields، يخرج افتراضيًا _id والحقول المدرجة صراحةً فقط: 1 يتضمن، 0 يستبعد، والتعبير ينشئ حقلًا جديدًا. استخدمه لتقليص المستندات أو إعادة تسمية الحقول أو تسطيح الكائنات المضمنة. لا يمكن خلط الإدراج والاستبعاد (باستثناء _id).

الفئةالمراحل الأساسية
إصدار MongoDB1.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

{ $project: { <field>: <1 or 0 or expression>, ... } }

⚙️ المعلمات

إسقاط الحقولأسماء الحقول مربوطة بـ 1 (تضمين) أو 0 (استبعاد) أو تعبير تجميع (حقل محسوب).

القيمة المرجعة:تدفق مستندات مُسقَط

▶ مثال

نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):

// $project: إبقاء name وحساب total
db.orders.aggregate([
  { $project: { _id: 0, name: 1, total: { $multiply: ['$price', '$qty'] } } }
])

المخرجات:

// كل مستند أصبح يحتوي الآن name وtotal فقط
{ "name": "Pen", "total": 150 }
{ "name": "Book", "total": 30 }

📌 ملاحظات

📚 دروس ذات صلة

❓ الأسئلة الشائعة

Qما الفرق بين $project و $addFields؟
Aيُبقي $addFields كل الحقول الأصلية ويضيف جديدة؛ بينما يسقط $project الحقول غير المدرجة افتراضيًا، ويُستخدم لقص أو إعادة بناء شكل المستند.
Qهل يمكن لـ $project استبعاد عدة حقول دفعة واحدة؟
Aنعم، اضبطها كلها على 0، مثل { $project: { secret: 0, log: 0 } }، مع إبقاء كل حقل آخر.
Qهل يغيّر $project ترتيب الحقول؟
Aتتبع حقول المخرجات الترتيب المكتوب في الإسقاط، بغض النظر عن ترتيب المستند الأصلي.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%