Kueri yang benar untuk digunakan di sini menggunakan kerangka kerja agregasi
yang memiliki $geoNear
tahap pipa untuk membantu dengan ini. Ini juga satu-satunya tempat Anda dapat "mengurutkan" dengan beberapa kunci, karena sayangnya $nearSphere
"geospasial" tidak memiliki proyeksi "meta" untuk "jarak" seperti $text
memiliki "skor".
Juga geoNear
perintah database yang Anda gunakan juga tidak dapat digunakan dengan "kursor" .sort()
dengan cara itu juga.
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 }
])
Itu setara dengan apa yang Anda coba lakukan.
Dengan kerangka kerja agregasi, Anda menggunakan "operator pipa"
alih-alih "pengubah kursor" untuk melakukan hal-hal seperti $sort
, $skip
dan $limit
. Ini juga harus berada dalam urutan Logis, sedangkan pengubah kursor umumnya mengerjakannya.
Ini adalah "pipa", seperti "pipa Unix". |
Juga, berhati-hatilah dengan "maxDistance" dan "distanceMuliplier". Karena koordinat Anda berada dalam "pasangan koordinat lama" dan bukan GeoJSON
format, maka jarak diukur dalam "radian". Jika Anda memiliki data lokasi tersimpan GeoJSON maka hasilnya dikembalikan dalam "meter".