【问题标题】:mongodb union $or problemsmongodb联合$或问题
【发布时间】:2011-03-27 01:39:36
【问题描述】:

我有一个集合,它是两个用户之间的操作日志。它有一个 src_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 是 src_id 并且 ids 列表中的任何 id 是 dest_id 的所有记录,或者 id1 是 dest_id 并且 ids 列表中的任何 id 是 src_id 的任何记录。

我正在使用 pymongo 1.7。谢谢!

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    $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'))
    

    【讨论】:

      【解决方案2】:

      我认为你不能那样使用$or。您将必须执行联合客户端。

      【讨论】:

        猜你喜欢
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 2013-01-18
        • 2016-12-15
        • 2021-05-21
        相关资源
        最近更新 更多