MongoDB Union $ или проблемы
Вопрос
У меня есть коллекция, которая является журналом действий между двумя пользователями. У него есть 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
как это. Вам придется выполнить союзную сторону клиента.