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:
2dsphereindeks untuk data lokasi yang didefinisikan sebagai GeoJSON poin2dindeks 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 .