mongodb 联合 $or 问题
我有一个记录用户之间操作的日志,里面有两个字段,一个是源用户的ID(src_id),另一个是目标用户的ID(dest_id)。
我想要获取所有与id1和一组ID("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} }
]}
)
有人能帮我看看我哪里做错了吗?更重要的是,如何在mongo中实现我想要的功能。
我想获取所有记录,其中id1是源用户ID(src_id),而ids列表中的任何一个ID是目标用户ID(dest_id),或者是记录中id1是目标用户ID(dest_id),而ids列表中的任何一个ID是源用户ID(src_id)。
我使用的是pymongo 1.7。谢谢!
2 个回答
0
我觉得你不能那样使用 $or
。你需要在客户端进行合并。
0
$or 操作符在 MongoDB 1.5.3 及之后的版本中可以使用。
另外一种方法是使用一个 JavaScript 函数,类似于...
find = self.db.action_log.find()
find.where(pymongo.code.Code('this.dest_id==1 || this.src_id==2'))