Вопрос

У меня есть коллекция, которая является журналом действий между двумя пользователями. У него есть src_id и dest_id.

Я хочу получить все записи, которые являются действиями между ID1 и списком IDS - «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, и любой из идентификаторов в списке идентификаторов - это DEST_ID или любые записи, где ID1 - это DEST_ID, и любая из идентификаторов в списке 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