2011-10-10 46 views
2

我有一个相对复杂的查询,我正在运行。我已经将它包含在下面,但基本上,我有一个位置查询与$或$ in查询结合在一起,全部按照日期/时间排序。每当我运行完整的查询,尽管它以升序而不是降序返回。适当的索引和MongoDB排序

如果我拉出查询的位置部分,它将按照正确的顺序成功返回结果,但是一旦我将查询的位置组件重新放入,它将继续失败。

这里是写在PHP查询:

$query = array( 
     '$or' => array(
      array(ISPUBLIC => true), 
      array(GROUP_INVITES.".".TO.".".INVITE_VAL => array('$in' => $user_groups)) 
     ), 
     LOC => array('$near' => array((float)$lon , (float)$lat), '$maxDistance' => 1) //Using 1 degree for the max distance for now 
    ); 

$res = $this->db->find($query)->sort(array('ts'=>-1))->limit($limit)->skip($start); 

使用的字段映射到数据库中的字段常量。我的第一个假设是索引配置不正确,但如何将地理空间查询与其他索引结合使用时,我该如何编制索引?

UPDATE

我已经下简化了查询,能够重现问题:

$query = array( 
    HOLLER_GROUP_INVITES.".".HOLLER_TO.".".INVITE_VAL => array('$in' => $user_groups), 
    HOLLER_LOC => array('$near' => array((float)$lon , (float)$lat), '$maxDistance' => 1) 
); 

更新2

我已经运行额外的测试看起来当限制被删除时,它按照正确的方向排序。不知道这里发生了什么。

回答