Amir Alsaeed نشر 18 يونيو 2021 أرسل تقرير مشاركة نشر 18 يونيو 2021 لدي مجموعة من المستندات بالبنية التالية: { "_id" : ..., "employees" : ["employeeName1"], "depts" : ["2223"] } وقمت بإجراء استعلام للحصول على المستندات التي تحوي عدد محدد من الموظفين employees بهذا الشكل: find({ employees : { $size : 2 }}) ولكن كيف يمكنني جلب المستندات التي تحوي أكبر من عدد محدد؟ لقد حاولت استخدام gt$ بدلاً من size ولكن لم أحصل على النتيجة المطلوبة: find({ employees : { $size: { $gt : 5 } }}) فهل هنالك طريقة أخرى لأتمكن من جلب المستندات التي تحوي عدد عناصر ضمن مصفوفة أكبر أو أصغر من عدد محدد (دون تغيير بنية المستند الحالية)؟ 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 Sam Ahw نشر 18 يونيو 2021 أرسل تقرير مشاركة نشر 18 يونيو 2021 بدءً من الإصدار 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 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Wael Aljamal نشر 18 يونيو 2021 أرسل تقرير مشاركة نشر 18 يونيو 2021 عليك فقط عكس الشرط الأخير: find({ employees : { $gt : { $size: 5} }}) هكذا سيتم جلب أكبر مصفوفة لحجم أكبر من 5، لأنه يجب تمرير الخاصية المطلوبة للدالة gt 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 سمير عبود نشر 18 يونيو 2021 أرسل تقرير مشاركة نشر 18 يونيو 2021 يُمكن القيام بالأمر عن طريق إستخدام where بالشكل التالي: .find( { $where: "this.employees.length > 2" } ); كما يُمكنك أيضاً إستخدام هذه الطريقة: // ابحث عن جميع المستندات التي تحتوي على 3 عناصر على الأقل في المصفوفة .find({'employees.2': {$exists: true}}) 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
-2 عبدالله عبدالرحمن11 نشر 18 يونيو 2021 أرسل تقرير مشاركة نشر 18 يونيو 2021 للحصول على النتائج الذي تكون أكبر من Greater than وفي mongo تكتب إختصاراً gt ، ويمكنك إستخدام هذا الأمر db.collection.find( { employees: { $gt: 5 } } ) ويجب عليك إستخدام gt$ منفصلاً من دون إستخدام size$ وإذا أردت الحصول على النتائج أكبر من أو يساوي greater than or equal يمكنك إستخدام الأمر الآتي db.collection.find( { employees: { $gte: 5 } } ) اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Amir Alsaeed
لدي مجموعة من المستندات بالبنية التالية:
{ "_id" : ..., "employees" : ["employeeName1"], "depts" : ["2223"] }
وقمت بإجراء استعلام للحصول على المستندات التي تحوي عدد محدد من الموظفين employees بهذا الشكل:
find({ employees : { $size : 2 }})
ولكن كيف يمكنني جلب المستندات التي تحوي أكبر من عدد محدد؟ لقد حاولت استخدام gt$ بدلاً من size ولكن لم أحصل على النتيجة المطلوبة:
find({ employees : { $size: { $gt : 5 } }})
فهل هنالك طريقة أخرى لأتمكن من جلب المستندات التي تحوي عدد عناصر ضمن مصفوفة أكبر أو أصغر من عدد محدد (دون تغيير بنية المستند الحالية)؟
رابط هذا التعليق
شارك على الشبكات الإجتماعية
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.