A consulta correta a ser usada aqui usa a estrutura de agregação que tem o
$geoNear
estágio de pipeline para ajudar com isso. É também o único lugar onde você pode "classificar" por várias chaves, como infelizmente o $nearSphere
"geoespacial" não tem uma projeção "meta" para "distância" como $text
tem uma "pontuação". Também o
geoNear
comando de banco de dados que você está usando também não pode ser usado com "cursor" .sort()
dessa forma também. db.paging.aggregate([
{ "$geoNear": {
"near": [106.606033,29.575897 ],
"spherical": true,
"distanceField": "distance",
"distanceMuliplier": 6371,
"maxDistance": 1/6371
}},
{ "$sort": { "distance": 1, "createdate": -1 } },
{ "$skip": ( 2-1 ) * 2 },
{ "$limit": 5 }
])
Isso é o equivalente do que você está tentando fazer.
Com a estrutura de agregação, você usa os "operadores de pipeline" em vez de "modificadores de cursor" para fazer coisas como
$sort
, $skip
e $limit
. Também estes devem estar em uma ordem lógica, enquanto os modificadores de cursor geralmente resolvem isso. É um "pipeline", assim como "tubo Unix".
|
Além disso, tenha cuidado com "maxDistance" e "distanceMuliplier". Como suas coordenadas estão em "pares de coordenadas herdadas" e não em
GeoJSON
formato, então as distâncias são medidas em "radianos". Se você tiver dados de localização armazenados em GeoJSON, o resultado será retornado em "metros".