2

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

如果我拉出查询的位置部分,它会以正确的顺序成功返回结果,但是一旦我把查询的位置部分放回去,它就会继续失败。

这是用 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);

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

更新

我已经能够通过将查询简化为:

$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

我已经进行了额外的测试,似乎当限制被删除时,它的排序方向是正确的。不知道这里发生了什么。

4

1 回答 1

1

这个问题似乎有答案:Sorting MongoDB GeoNear results by something other than distance? .... 显然 $near 已经在进行排序了。如果您只是想限制在给定边界内但按其他内容排序,则应使用 $within 而不是 $near。

于 2011-10-10T22:45:35.270 回答