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

الاستعلام حسب عدد عناصر المصفوفة في mongodb

Amir Alsaeed

السؤال

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

{
  "_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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...