Mongodb Union $ или проблемы - PullRequest
       4

Mongodb Union $ или проблемы

1 голос
/ 09 августа 2010

У меня есть коллекция, которая представляет собой журнал действий между двумя пользователями. У него есть 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, а любой из идентификаторов в списке идентификаторов - dest_id ИЛИ любые записи, где id1 - это dest_id, а любые идентификаторы в списке идентификаторов - src_id.

Я использую пимонго 1.7. Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 августа 2010

Оператор $ или доступен в MongoDB 1.5.3 и более поздних версиях.

Альтернативой является использование функции Javascript, что-то вроде ...

find = self.db.action_log.find()
find.where(pymongo.code.Code('this.dest_id==1 || this.src_id==2'))
0 голосов
/ 09 августа 2010

Я не думаю, что вы можете использовать $or таким образом. Вам нужно будет выполнить объединение на стороне клиента.

...