我正在运行一个相对复杂的查询。我已经将它包含在下面,但基本上我有一个位置查询与一个 $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
我已经进行了额外的测试,似乎当限制被删除时,它的排序方向是正确的。不知道这里发生了什么。