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

مشكلة في الحصول على قيمة محددة من مصفوفة في mongodb

Amir Alsaeed

السؤال

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

{  
   "_id":ObjectId("e7c5942f08fe44c621912952"),
   "boxTitle": "Box1",
   "balls":[  
      {  
         "number":"1",
         "color":"blue"
      },
      {  
         "number":"2",
         "color":"red"
      }
   ]
},

وأحاول الحصول على المستندات التي تحقق شرط عناصر محددة من المصفوفة balls. ولكن عندما أقوم بتجربة الاستعلام التالي:

find({"balls.color": "red"}, {"balls.color": 1})

يتم إرجاع هذا المستند لكن مع جميع عناصر المصفوفة balls، ولكن أنا أرغب بالحصول فقط على عنصر المصفوفة الذي يحقق الشرط أي فقط العنصر ذو اللون الأحمر، بدلاً من إرجاع العنصرين معاً.

كيف يمكنني تحقيق ذلك؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يتم تطبيق selection في mongodb بدءً من طبقة المستندات.

لذلك عندما نقوم بكتابة الاستعلام {"balls.color": "red"} سيتم إعادة (المستند) الذي يحقق هذا الشرط كاملاً دون تطبيق أي شروط أو فلتر على المصفوفات ضمنه. أما في حالتك فأنت ترغب أيضاً بإجراء فلتر على عناصر المصفوفة ضمن هذا المستند الذي سيتم إرجاعه. ويمكن في هذه الحالة استخدام elemMatch والذي سيعيد أول عنصر محقق لهذا الشرط فقط:

find({"balls.color": "red"}, {_id: 0, balls: {$elemMatch: {color: "red"}}});

وفي حال كانت النسخة لديك أقدم من 2.2 فلن تستطيع استخدام elemMatch، يمكنك بشكل مشابه استخدام projection مع المعامل $ كالتالي:

find({"balls.color": "red"}, {_id: 0, 'color.$': 1});

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكن استعمال المعامل and$ الذي يقبل مصفوفة تحوي على التعابير الشرطية، لتصبح العبارة كالتالي:

find( $and: [{"balls.color": "red"}, {"balls.color": 1}])

أو ربما أنت تقصد كتابة الشرط هكذا:

find({"balls.color": "red", "balls.color": 1})

حيث تمرر الخاصيات و القيم جميعها بعنصر واحد.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...