Prawidłowe zapytanie do użycia w tym miejscu korzysta z struktury agregacji
który ma $geoNear
etap rurociągu, aby pomóc w tym. Jest to również jedyne miejsce, w którym można „sortować” według wielu kluczy, ponieważ niestety „geoprzestrzenna” $nearSphere
nie ma projekcji "meta" dla "odległość", jak $text
ma „wynik”.
Również geoNear
polecenie bazy danych, którego używasz, nie może być również używane z "kursorem" .sort()
w ten sposób.
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 }
])
To odpowiednik tego, co próbujesz zrobić.
W ramach agregacji używasz "operatorów potoku"
zamiast "modyfikatorów kursora" do robienia rzeczy takich jak $sort
, $skip
i $limit
. Również te muszą być w porządku logicznym, podczas gdy modyfikatory kursora zazwyczaj to rozwiązują.
Jest to „rurociąg”, podobnie jak „rurka uniksowa”. |
Uważaj także na "maxDistance" i "distanceMuliplier". Ponieważ Twoje współrzędne znajdują się w „starszych parach współrzędnych”, a nie w GeoJSON
w formacie, odległości są mierzone w radianach. Jeśli masz zapisane dane lokalizacji GeoJSON, wynik jest zwracany w „metrach”.