La consulta correcta para usar aquí usa el marco de agregación
que tiene el $geoNear
etapa de canalización para ayudar con esto. También es el único lugar en el que puede "ordenar" por varias claves, ya que, lamentablemente, el $nearSphere
"geoespacial" no tiene una proyección "meta" para "distancia" como $text
tiene una "puntuación".
También el geoNear
El comando de base de datos que está utilizando tampoco se puede usar con "cursor" .sort()
de esa manera tampoco.
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 }
])
Eso es el equivalente de lo que estás tratando de hacer.
Con el marco de agregación, utiliza los "operadores de canalización"
en lugar de "modificadores de cursor" para hacer cosas como $sort
, $skip
y $limit
. También estos deben estar en un orden lógico, mientras que los modificadores de cursor generalmente funcionan.
Es una "tubería", al igual que "tubería Unix". |
Además, tenga cuidado con "maxDistance" y "distanceMuliplier". Dado que sus coordenadas están en "pares de coordenadas heredados" y no GeoJSON
formato, entonces las distancias se miden en "radianes". Si tiene datos de ubicación almacenados en GeoJSON, el resultado se muestra en "metros".