اذهب إلى المحتوى

السؤال

نشر

لدي مجموعة من المستندات بالبنية التالية:

{
  "_id" : ...,
  "employees" : ["employeeName1"],
  "depts" : ["2223"]
}

وقمت بإجراء استعلام للحصول على المستندات التي تحوي عدد محدد من الموظفين employees بهذا الشكل:

find({ employees : { $size : 2 }})

ولكن كيف يمكنني جلب المستندات التي تحوي أكبر من عدد محدد؟ لقد حاولت استخدام gt$ بدلاً من size ولكن لم أحصل على النتيجة المطلوبة:

find({ employees : { $size: { $gt : 5 } }})

فهل هنالك طريقة أخرى لأتمكن من جلب المستندات التي تحوي عدد عناصر ضمن مصفوفة أكبر أو أصغر من عدد محدد (دون تغيير بنية المستند الحالية)؟

Recommended Posts

  • 1
نشر

بدءً من الإصدار 4.4 أصبح يجب تمرير قيمة رقمية عند استخدام gt$، ولا يمكنك في الإصدارات اللاحقة استخدام gt$ مع size$. لذلك يجب عليك التأكد من إصدار mongodb لديك قبل كتابة الاستعلام.

ومن بعض الطرق التي تعمل على الإصدارات المختلفة:

عن طريق استخدام where:

find( { $where: "this.employees.length > 5" } );

عن طريق استخدام التجميع aggregation:

aggregate(
[
     {$project: {_id: 1, employees:1, depts:1, 
                 total_employees: {$size: "$employees"}
                }
     },
     {$match: {"total_employees": {$gt: 5}}}
])

عن طريق استخدام المسارات:

find({'employees.5': {$exists: true}})

وبهذه الطريقة نختبر وجود العنصر السادس من كل مصفوفة ونعيد المستندات التي تحوي عدد أكبر من 5

 

  • 0
نشر

يُمكن القيام بالأمر عن طريق إستخدام where بالشكل التالي:

.find( { $where: "this.employees.length > 2" } );

كما يُمكنك أيضاً إستخدام هذه الطريقة:

// ابحث عن جميع المستندات التي تحتوي على 3 عناصر على الأقل في المصفوفة
.find({'employees.2': {$exists: true}})

 

  • -2
نشر

للحصول على النتائج الذي تكون أكبر من Greater than وفي mongo تكتب إختصاراً gt ، ويمكنك إستخدام هذا الأمر

db.collection.find( { employees: { $gt: 5 } } )

ويجب عليك إستخدام gt$ منفصلاً من دون إستخدام size$

وإذا أردت الحصول على النتائج أكبر من أو يساوي greater than or equal يمكنك إستخدام الأمر الآتي

db.collection.find( { employees: { $gte: 5 } } )

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...