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".