Die hier zu verwendende korrekte Abfrage verwendet das Aggregation Framework
welches den $geoNear
hat
Pipeline-Phase, um dabei zu helfen. Es ist auch der einzige Ort, an dem Sie nach mehreren Schlüsseln "sortieren" können, wie unglücklicherweise der "georäumliche" $nearSphere
hat keine "Meta"-Projektion für "Entfernung" wie $text
hat eine "Punktzahl".
Auch die geoNear
Der von Ihnen verwendete Datenbankbefehl kann auch nicht mit "cursor" .sort()
verwendet werden auch nicht so.
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 }
])
Das entspricht dem, was Sie zu tun versuchen.
Mit dem Aggregations-Framework verwenden Sie die "Pipeline-Operatoren"
anstelle von "Cursor-Modifikatoren", um Dinge wie $sort
zu tun , $skip
und $limit
. Auch diese müssen in einer logischen Reihenfolge sein, wohingegen die Cursor-Modifikatoren es im Allgemeinen ausarbeiten.
Es ist eine "Pipeline", genau wie "Unix-Pipe". |
Seien Sie auch vorsichtig mit "maxDistance" und "distanceMultiplier". Da sich Ihre Koordinaten in "Legacy-Koordinatenpaaren" befinden und nicht in GeoJSON
Format, dann werden die Entfernungen in "Bogenmaß" gemessen. Wenn Sie Standortdaten in GeoJSON gespeichert haben, wird das Ergebnis in "Metern" zurückgegeben.