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