Bu bölüm, MongoDB'nin jeo-mekansal sorgusunu tanıtır ve geometrik kesişme ve içerme sorgularını destekler.

Uygulama senaryoları:

  • Haritada bir daire çizip daire içindeki verileri sorgulayın.

Önkoşul Öğretici

MongoDB için Jeo-Mekansal Veri Depolama Biçimleri

Mesafeye dayalı veri sorgulamak için gereksinimler şunlardır:

  • Her belge verisi, örneğin: konum alanı bir mağazanın koordinatlarını saklar, için bir alan içermelidir.
  • 2dsphere veya 2d mekansal indeks oluşturun.

$geoWithin Operatörü

Genellikle belirli bir geometrik aralık içinde bulunan koordinat noktalarını sorgulamak için kullanılır, örneğin: harita üzerinde çizerek evleri ararken, harita üzerinde bir alan çizin ve bu alandaki evleri sorgulayın.

Sözdizim biçimi:

{
   <konum alanı>: { // Sorgu alanı
      $geoWithin: {
         $geometry: {
            type:  , // Yalnızca Polygon veya MultiPolygon'u destekler.
            coordinates: [ <koordinatlar> ]  // Jeometrik koordinat noktalarının koleksiyonu
         }
      }
   }
}

Örnek:

db.places.find(
   {
     loc: { // loc alanı koordinat verilerini saklar
       $geoWithin: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Bu geometrik alandaki verileri bul
          }
       }
     }
   }
)

places koleksiyonundaki belge verilerini belirtilen geometrik alandaki için sorgulayın.

$geoIntersects Operatörü

$geoWithin'den farkı, $geoIntersects'ün iki geometri arasında kesişimin olup olmadığını belirlemek için kullanılmasıdır.

Biçim:

{
  <konum alanı>: { // Geometrik koordinat noktalarını saklayan alan
     $geoIntersects: {
        $geometry: {
           type: "<geojson nesne tipi>" , // Geometrik tip
           coordinates: [ <koordinatlar> ] // Geometrik koordinat noktalarının koleksiyonu, bu geometri ile kesişen verileri sorgulayın
        }
     }
  }
}

Örnek:

db.places.find(
   {
     loc: { // loc alanı, bir geometrik şekil olan alan verisini saklar
       $geoIntersects: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [
               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Bu geometri ile kesişen verileri sorgulayın
             ]
          }
       }
     }
   }
)