MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Urutkan geonear berdasarkan jarak dan waktu

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".




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $isoWeek

  2. Bagaimana cara mengatasi masalah asinkron MongoDB/Node ini?

  3. MongoDB GeoJSON Tidak dapat mengekstrak kunci geo dari objek, geometri cacat? saat memasukkan jenis Poligon

  4. MongoDB $currentDate

  5. Bagaimana cara mengisi relasi one to many pada luwak dengan parent refrencing?