Rumah >pangkalan data >MongoDB >Bagaimanakah saya menggunakan pengindeksan geospatial dan pertanyaan di mongoDB untuk aplikasi berasaskan lokasi?
Artikel ini menerangkan pengindeksan geospatial dan pertanyaan di MongoDB. Butirannya menggunakan indeks 2Dsphere untuk carian berasaskan lokasi yang cekap dengan Geojson. Artikel ini merangkumi pengendali geospatial seperti $ dekat, $ geowithin, dan manfaat prestasi mereka
MongoDB menyediakan sokongan yang mantap untuk data geospatial melalui indeks 2Dsphere. Indeks ini membolehkan pertanyaan yang cekap mengenai data lokasi yang disimpan sebagai objek Geojson. Untuk menggunakannya, anda perlu menyusun data anda dengan betul. Biasanya, data lokasi disimpan dalam dokumen sebagai bidang jenis GeoJSON
. Geojson menyokong pelbagai geometri seperti Point
, Polygon
, LineString
, dll.
Sebagai contoh, dokumen yang mewakili restoran mungkin kelihatan seperti ini:
<code class="json">{ "name": "Restaurant A", "location": { "type": "Point", "coordinates": [ -73.9728, 40.7644 ] // Longitude, Latitude } }</code>
Seterusnya, anda membuat indeks 2Dsphere di medan location
:
<code class="javascript">db.restaurants.createIndex( { location : "2dsphere" } )</code>
Selepas membuat indeks, anda boleh melakukan pertanyaan menggunakan pengendali geospatial. Pengendali umum termasuk $near
, $nearSphere
, $geoWithin
, dan $geoIntersects
.
$near
dan $nearSphere
: Pengendali ini mencari dokumen dalam radius tertentu titik tertentu. $near
menggunakan geometri planar, sesuai untuk jarak kecil, manakala $nearSphere
menggunakan geometri sfera, lebih tepat untuk jarak yang lebih besar.$geoWithin
: Pengendali ini mendapati dokumen yang geometriknya sepenuhnya dalam geometri tertentu (contohnya, bulatan, poligon).$geoIntersects
: Pengendali ini mendapati dokumen yang geometriknya bersilang dengan geometri yang ditentukan.Berikut adalah contoh pertanyaan:
Cari restoran dalam jarak 10 kilometer dari satu titik:
<code class="javascript">db.restaurants.find( { location: { $nearSphere: { $geometry: { type: "Point", coordinates: [ -73.9728, 40.7644 ] }, $maxDistance: 10000 // meters } } } )</code>
Cari restoran dalam poligon:
<code class="javascript">db.restaurants.find({ location: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -74, 41 ], [ -73, 41 ], [ -73, 40 ], [ -74, 40 ], [ -74, 41 ] ] ] } } } })</code>
Indeks geospatial secara dramatik meningkatkan prestasi pertanyaan berasaskan lokasi. Tanpa indeks, MongoDB akan melakukan imbasan koleksi, memeriksa setiap dokumen dalam koleksi untuk mencari lokasi yang sepadan. Ini sangat tidak cekap, terutamanya untuk dataset besar.
Dengan indeks 2dsphere, MongoDB dapat menggunakan struktur data spatial dengan cekap seperti pokok R untuk cepat menyempitkan ruang carian. Ini membolehkan ia mengembalikan hasil yang lebih cepat, terutamanya untuk pertanyaan yang melibatkan carian kedekatan ( $near
, $nearSphere
). Keuntungan prestasi paling ketara apabila berurusan dengan dataset besar yang mengandungi berjuta -juta titik lokasi. Masa pelaksanaan pertanyaan akan mengurangkan dengan ketara, meningkatkan respons aplikasi anda. Perbezaannya boleh menjadi perintah magnitud lebih cepat berbanding dengan carian yang tidak diindeks.
Ya, MongoDB menyokong pertanyaan geospatial yang kompleks, termasuk mencari mata dalam poligon. Seperti yang ditunjukkan dalam bahagian sebelumnya, pengendali $geoWithin
, bersempena dengan objek Polygon
Geojson, membolehkan anda mencari dokumen yang efisien yang lokasinya berada dalam poligon yang ditentukan. Ini berguna untuk senario seperti mencari semua restoran dalam sempadan bandar tertentu atau menentukan titik di dalam kawasan yang ditentukan khusus. Anda juga boleh menggunakan operator $geoIntersects
untuk mencari dokumen yang bersilang dengan geometri yang lebih kompleks seperti garis atau poligon lain. Fleksibiliti ini membolehkan anda membina ciri-ciri berasaskan lokasi yang canggih ke dalam aplikasi anda.
Beberapa perangkap biasa boleh menghalang pelaksanaan ciri -ciri geospatial yang berkesan di MongoDB:
Dengan berhati -hati menangani masalah yang berpotensi ini, anda dapat memastikan fungsi geospatial yang cekap dan tepat dalam aplikasi MongoDB anda.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan pengindeksan geospatial dan pertanyaan di mongoDB untuk aplikasi berasaskan lokasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!