distinct() (قيم مميزة)
آخر تحديث: 2026-10-09
distinct() (قيم مميزة)
تُعيد distinct() كل قيمة فريدة لحقل معين في المجموعة، مثل `db.users.distinct('address.city')`. تُعيد مصفوفة قيم دون تكرار وليس مستندات كاملة — مفيدة لتعداد الفئات أو القيم المتاحة. لاحظ أن استدعاء distinct على حقول كبيرة غير مفهرسة قد يكون بطيئًا، والنتائج محدودة بحد BSON البالغ 16 ميجابايت.
| الفئة | القراءة |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
db.<collection>.distinct(<field>, <filter>)
⚙️ المعلمات
| حقل | اسم الحقل المراد إزالة تكراره؛ المسارات المنقوطة مثل 'address.city' تعمل. |
|---|---|
| شرط التصفية | اختياري. يرشّح المستندات قبل جمع القيم. |
القيمة المرجعة:مصفوفة بالقيم المميزة؛ فارغة عندما لا يتطابق شيء.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// distinct: سرد كل مدن المستخدمين البالغين
const cities = db.users.distinct(
'address.city',
{ age: { $gt: 18 } }
)
cities
المخرجات:
[ 'Beijing', 'Shanghai', 'Guangzhou' ]
📌 ملاحظات
- تُعيد مصفوفة قيم وليس عدّادات؛ استخدم .length للعدّ
- الحقول المتداخلة تستخدم مسارات منقّطة مثل 'address.city'
- النتائج محدودة بـ 16 ميجابايت؛ استخدم خط أنابيب التجميع لمجموعات البيانات الضخمة
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qكيف يختلف distinct عن $group في إزالة التكرار داخل التجميع؟
Aتُعيد distinct() مصفوفة بسيطة من القيم الفريدة؛ بينما يمكن لـ $group أيضًا العدّ والجمع والتجميع بطرائق أغنى.
Qهل يمكن أن يعمل distinct على حقول متداخلة؟
Aنعم — استخدم مسارًا منقّطًا، مثل db.users.distinct('address.city').
Qهل تفشل distinct عندما تكون النتائج ضخمة؟
Aإذا تجاوزت النتيجة حد BSON البالغ 16 ميجابايت يُرفع خطأ؛ انتقل إلى خط أنابيب $group للنتائج الكبيرة جدًا.