2011-10-10 51 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

我已經運行額外的測試看起來當限制被刪除時,它按照正確的方向排序。不知道這裏發生了什麼。

回答