Bab ini memperkenalkan kueri geospasial MongoDB, yang mendukung kueri interseksi geometrik dan kontainer.
Skenario aplikasi:
- Menggambar lingkaran di peta dan melakukan kueri data dalam lingkaran tersebut.
Tutorial Prasyarat
Format Penyimpanan Data Geospasial untuk MongoDB
Prasyarat untuk melakukan kueri data berdasarkan jarak adalah sebagai berikut:
- Setiap data dokumen mengandung bidang untuk menyimpan data koordinat, misalnya: bidang lokasi menyimpan koordinat sebuah toko.
- Membuat indeks spasial 2dsphere atau 2d.
Operator $geoWithin
Umumnya digunakan untuk mengkueri titik koordinat yang terdapat dalam rentang geometrik tertentu, misalnya: saat mencari rumah dengan menggambar di peta, menggambar sebuah area di peta dan mengkueri rumah-rumah dalam area tersebut.
Format sintaks:
{
<bidang lokasi>: { // Bidang kueri
$geoWithin: {
$geometry: {
type: , // Hanya mendukung Poligon atau MultiPoligon.
coordinates: [ <koordinat> ] // Kumpulan titik koordinat geometrik
}
}
}
}
Contoh:
db.places.find(
{
loc: { // Bidang loc menyimpan data koordinat
$geoWithin: {
$geometry: {
type: "Polygon" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Temukan data dalam area geometrik ini
}
}
}
}
)
Mengkueri data dokumen dalam area geometrik yang ditentukan di dalam koleksi tempat.
Operator $geoIntersects
Perbedaan dari $geoWithin adalah bahwa $geoIntersects digunakan untuk menentukan apakah ada interseksi antara dua geometri.
Format:
{
<bidang lokasi>: { // Bidang penyimpan titik koordinat geometrik
$geoIntersects: {
$geometry: {
type: "<tipe objek geojson>" , // Tipe geometrik
coordinates: [ <koordinat> ] // Kumpulan titik koordinat geometrik, mengkueri data dengan interseksi dengan geometri ini
}
}
}
}
Contoh:
db.places.find(
{
loc: { // Bidang loc menyimpan data area, yang merupakan bentuk geometrik
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Mengkueri data dengan interseksi dengan geometri ini
]
}
}
}
}
)