سؤال

لديّ مجموعة هي سجل عمل بين مستخدمين. لديها src_id و dest_id.

أنا أتطلع إلى جلب جميع السجلات التي هي الإجراءات بين ID1 وقائمة معرفات - "IDS = [ID2 ، ID3 ، ID4].

يعملانان التاليان بشكل صحيح:

act_obs = self.db.action_log.find(
        {'src_id': id1, 'dest_id': {'$in': ids} } 
       )

act_obs = self.db.action_log.find(
        {'dest_id': id1, 'src_id': {'$in': ids} } 
       )

ومع ذلك ، وهذا هو المكان الذي لا يمكنني فيه معرفة الخطأ ، يرفض التالي إرجاع أي نتائج على الإطلاق:

act_obs = self.db.action_log.find(
        {'$or': [
          {'dest_id': id1, 'src_id': {'$in': ids} },
          {'src_id': id1, 'dest_id': {'$in': ids} }
        ]}
       )

هل يمكن لأحد أن يلقي بعض الضوء على ما أفعله خطأ ، إذا كان هذا هو الحال؟ والأهم من ذلك ، كيفية تحقيق ما أحاول القيام به داخل مونغو.

أحاول الحصول على جميع السجلات التي يكون فيها ID1 هو SRC_ID وأي من IDS في قائمة IDS هو DEST_ID أو أي سجلات يكون فيها ID1 هو DEST_ID وأي من IDS في قائمة IDS هو SRC_ID.

أنا أستخدم Pymongo 1.7. شكرًا لك!

هل كانت مفيدة؟

المحلول

يتوفر $ أو المشغل في MongoDB 1.5.3 وبعد ذلك.

البديل هو استخدام وظيفة JavaScript ، شيء مثل ...

find = self.db.action_log.find()
find.where(pymongo.code.Code('this.dest_id==1 || this.src_id==2'))

نصائح أخرى

لا أعتقد أنه يمكنك استخدام $or مثل هذا. سيكون عليك أداء جانب عميل الاتحاد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top