Den korrekta frågan som ska användas här använder aggregationsramverket
som har $geoNear
pipeline skede för att hjälpa till med detta. Det är också det enda stället du kan "sortera" efter flera nycklar, som tyvärr den "geospatiala" $nearSphere
har ingen "meta"-projektion för "avstånd" som $text
har ett "poäng".
Även geoNear
databaskommandot du använder kan inte heller användas med "cursor" .sort()
på det sättet 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 är motsvarigheten till vad du försöker göra.
Med aggregeringsramverket använder du "pipeline-operatorer"
istället för "markörmodifierare" för att göra saker som $sort
, $skip
och $limit
. Även dessa måste vara i en logisk ordning, medan markörmodifierarna vanligtvis löser det.
Det är en "pipeline", precis som "Unix pipe". |
Var också försiktig med "maxDistance" och "distanceMuliplier". Eftersom dina koordinater är i "äldre koordinatpar" och inte GeoJSON
format, då mäts avstånden i "radianer". Om du har GeoJSON lagrad platsdata så returneras resultatet i "meter".