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
             ]
          }
       }
     }
   }
)