De juiste query om hier te gebruiken maakt gebruik van het aggregatieraamwerk
met de $geoNear
pijplijnfase om hierbij te helpen. Het is ook de enige plaats waar je kunt "sorteren" op meerdere sleutels, zoals helaas de "geospatiale" $nearSphere
heeft geen "meta"-projectie voor "afstand" zoals $text
heeft een "score".
Ook de geoNear
database-opdracht die u gebruikt, kan ook niet worden gebruikt met "cursor" .sort()
op die manier ook.
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 }
])
Dat is het equivalent van wat u probeert te doen.
Met het aggregatieraamwerk gebruik je de "pipeline operators"
in plaats van "cursormodifiers" om dingen te doen zoals $sort
, $skip
en $limit
. Ook deze moeten in een logische volgorde staan, terwijl de cursormodifiers het over het algemeen uitwerken.
Het is een "pijplijn", net als "Unix-pijp". |
Wees ook voorzichtig met "maxDistance" en "distanceMuliplier". Aangezien uw coördinaten in "oude coördinatenparen" zijn en niet GeoJSON
formaat, dan worden de afstanden gemeten in "radialen". Als u GeoJSON-locatiegegevens hebt opgeslagen, wordt het resultaat in "meters" geretourneerd.