$regexFindAll (كل تطابقات التعبير النمطي)
آخر تحديث: 2026-10-09
$regexFindAll (كل تطابقات التعبير النمطي)
ينفذ $regexFindAll بحثًا بتعبير نمطي على سلسلة نصية ويُرجع كل تطابق كمصفوفة؛ لكل عنصر حقول match و idx و captures، وعدم التطابق يُرجع مصفوفة فارغة. مثالي لاستخراج أنماط متكررة مثل رسائل البريد أو الروابط أو الأرقام. على عكس $regexFind لا يُرجع null أبدًا — دائمًا مصفوفة، لذا يعدّ $size التطابقات مباشرة.
| الفئة | النص |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $regexFindAll: { input: <string-expression>, regex: <pattern>, options: <options> } }
⚙️ المعلمات
| input | مطلوب؛ النص المراد البحث فيه. |
|---|---|
| regex | مطلوب؛ نص نمط تعبير نمطي متوافق مع Perl. |
| options | أعلام اختيارية مثل i وm. |
القيمة المرجعة:مصفوفة من مستندات المطابقة؛ فارغة عند عدم وجود أي تطابق؛ وnull إذا كان الإدخال null.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $regexFindAll: استخراج كل الروابط من المشاركات
db.posts.aggregate([
{ $project: { links: { $regexFindAll: { input: '$body', regex: 'https?://[a-z0-9.]+' } } } }
])
المخرجات:
{ "_id": 1, "links": [ { "match": "https://a.com", "idx": 10, "captures": [] }, { "match": "https://b.org", "idx": 32, "captures": [] } ] }
📌 ملاحظات
- عدم التطابق يعطي مصفوفة فارغة لا null — يعمل $size مباشرة
- المطابقة شاملة؛ لا تتوقف عند أول إصابة
- راقب الأداء على النصوص الكبيرة؛ افحص مسبقًا بـ $regexMatch عند الحاجة
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qماذا يُرجع عند عدم تطابق شيء؟
Aمصفوفة فارغة، لا null.
Qكيف أعدّ التطابقات؟
Aلفّ النتيجة بـ $size.
Qما الفرق عن $regexFind؟
A$regexFind يُرجع أول تطابق (null إن لم يوجد)؛ و $regexFindAll يُرجع كل التطابقات.