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

Di Mongo apa perbedaan antara $near dan $nearSphere?

Kata kuncinya adalah sphere untuk membedakan antara $near dan $nearSphere .

Seperti yang Anda ketahui, $nearSphere dinyatakan untuk menghitung jarak menggunakan geometri bola. Ini terkait dengan proyeksi peta Bumi (distorsi ). Di mana indeks MongoDB 2d didasarkan pada Cartesian dan indeks 2dsphere MongoDB didasarkan pada Geodesic .

Cukup teorinya, mari kita gunakan beberapa contoh. Katakanlah kita memiliki dua dokumen seperti di bawah ini:

db.map.insert({ "_id": "Westfield London", "location": [ -0.22157, 51.507176 ] });
db.map.insert({ "_id": "Green Lanes Shopping Centre", "location": [ -0.098092, 51.576198 ] });

Manual untuk kedua operator menentukan bahwa kita dapat menggunakan:

  • 2dsphere indeks untuk data lokasi yang didefinisikan sebagai GeoJSON poin
  • 2d indeks untuk data lokasi yang didefinisikan sebagai pasangan koordinat lama

Indeks:2dsphere , Kueri:GeoJSON

db.map.createIndex({"location": "2dsphere"});

db.map.find({"location":{"$nearSphere":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ] }}}});

db.map.find({"location":{"$near":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ]}}}});

Dalam hal ini, kedua kueri akan mengembalikan hasil yang sama, karena indeks disimpan di 2dsphere .

Hasil:

[ /* $nearSphere */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]

Indeks:2d , Kueri:Koordinat Lama

db.map.createIndex({"location": "2d"});

db.map.find({"location":{"$nearSphere":[ -0.127748, 51.507333 ]}});

db.map.find({"location":{"$near":[ -0.127748, 51.507333 ]}});

Di sinilah perbedaan terjadi, hasil untuk $nearSphere dihitung secara sferis terlepas dari indeks, sedangkan $near dihitung dalam proyeksi datar.

Hasil:

[ /* $nearSphere */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
    {"_id" : "Green Lanes Shopping Centre"},
    {"_id" : "Westfield London"}
]

Lihat inti:skrip pengujian JS dari contoh di atas. Ini diuji menggunakan MongoDB v3.4.4.

Lihat juga Indeks dan Kueri Geospasial .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Gunakan kerangka kerja agregasi atau mapreduce untuk mencocokkan array string dalam dokumen (pencocokan profil)

  2. Urutan mongoid berdasarkan panjang array

  3. Hentikan Replika Set MongoDB

  4. Replikasi hanya dokumen di mana {'public':true} di MongoDB

  5. Lihat kemajuan pekerjaan agregasi mongodb yang sudah berjalan lama