$redact (الترشيح)
آخر تحديث: 2026-10-09
$redact (الترشيح)
يصفّي $redact على مستوى الحقل باستخدام بيانات صلاحية مخزنة في المستندات، مع المتغيرات النظامية $$KEEP و $$PRUNE و $$DESCEND. ينزل $$DESCEND إلى المستندات المضمنة، ويسقط $$PRUNE المستند وشجرته الفرعية، ويُبقي $$KEEP عليه. إنه تصفية من جانب الاستعلام، وليس حدودًا أمنية.
| الفئة | المتقدم والتشخيص |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $redact: { $cond: { if: { $eq: [ "$level", "userLevel" ] }, then: "$$PRUNE", else: "$$DESCEND" } } }
⚙️ المعلمات
| تعبير الشرط | تعبير يُقيَّم عند كل مستوى تداخل، ويُنتج $$KEEP أو $$PRUNE أو $$DESCEND. |
|---|
القيمة المرجعة:تدفق مستندات مُنقَّح بقواعد الوصول
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $redact: الإبقاء على المحتوى العام فقط
db.employees.aggregate([
{ $redact: {
$cond: { if: { $eq: ['$access', 'public'] }, then: '$$KEEP', else: '$$DESCEND' }
} }
])
المخرجات:
// تُزال المستندات أو الحقول غير العامة
📌 ملاحظات
- فقط $$KEEP و $$PRUNE و $$DESCEND نتائج صالحة
- يمر التقييم عبر كل مستوى تداخل
- على خلاف $project، يصفّي $redact بشكل متكرر حسب المستوى
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qمتى يُستخدم $$DESCEND؟
Aعندما يجتاز المستند الحالي لكن المستندات المضمنة ما زالت تحتاج فحصًا؛ أرجئ القرار إلى الأسفل.
Qهل يمكن لـ $redact أن يحل محل نظام تحكم بالوصول؟
Aيصفّي وقت الاستعلام لكنه ليس حدودًا أمنية؛ يمكن للعملاء الاستعلام عن المجموعة مباشرة ما زالوا.
Qكيف يختلف $redact عن $match؟
Aيصفّي $match مستندات كاملة بشروط المستوى الأعلى؛ بينما يقرر $redact لكل مستوى تداخل بشكل متكرر.