実行している比較的複雑なクエリがあります。以下にそれを含めましたが、基本的には、位置クエリと $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
追加のテストを実行しましたが、制限が削除されると正しい方向にソートされるようです。ここで何が起こっているのかわかりません。