Den korrekte forespørgsel, der skal bruges her, bruger aggregeringsramme
som har $geoNear
pipeline fase for at hjælpe med dette. Det er også det eneste sted, du kan "sortere" efter flere nøgler, som desværre den "geospatiale" $nearSphere
har ikke en "meta" projektion for "afstand" som $text
har en "score".
Også geoNear
databasekommando du bruger kan heller ikke bruges med "cursor" .sort()
på den måde heller.
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 }
])
Det svarer til det, du forsøger at gøre.
Med aggregeringsrammen bruger du "pipeline-operatørerne"
i stedet for "cursor modifiers" for at gøre ting som $sort
, $skip
og $limit
. Også disse skal være i en logisk rækkefølge, hvorimod markørmodifikatorerne generelt løser det.
Det er en "pipeline", ligesom "Unix pipe". |
Vær også forsigtig med "maxDistance" og "distanceMuliplier". Da dine koordinater er i "ældre koordinatpar" og ikke GeoJSON
format, så måles afstandene i "radianer". Hvis du har GeoJSON lagrede lokationsdata, returneres resultatet i "meter".