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