اتحاد Mongodb $ أو المشاكل
سؤال
لديّ مجموعة هي سجل عمل بين مستخدمين. لديها 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
مثل هذا. سيكون عليك أداء جانب عميل الاتحاد.