Ten rozdział przedstawia zapytania geoprzestrzenne MongoDB, które obsługują zapytania dotyczące przecięcia i zawierania.

Przykłady zastosowań:

  • Narysuj okrąg na mapie i wyszukaj dane wewnątrz tego okręgu.

Wymagane samouczki

Formaty przechowywania danych geoprzestrzennych dla MongoDB

Wymagania wstępne dotyczące zapytań opartych na odległości obejmują:

  • Każdy dokument danych zawiera pole do przechowywania danych współrzędnych, na przykład: pole lokalizacji przechowuje współrzędne sklepu.
  • Utwórz indeks przestrzenny 2dsphere lub 2d.

Operator $geoWithin

Często używany do wyszukiwania punktów współrzędnych zawartych w określonym zakresie geometrycznym, na przykład: podczas wyszukiwania domów poprzez rysowanie na mapie, narysuj obszar na mapie i wyszukaj domy wewnątrz tego obszaru.

Format składni:

{
   <pole lokalizacji>: { // Pole zapytania
      $geoWithin: {
         $geometry: {
            type:  , // Obsługuje tylko Polygon lub MultiPolygon.
            coordinates: [ <współrzędne> ]  // Zbiór punktów współrzędnych geometrycznych
         }
      }
   }
}

Przykład:

db.places.find(
   {
     loc: { // Pole loc przechowuje dane współrzędnych
       $geoWithin: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Znajdź dane wewnątrz tego obszaru geometrycznego
          }
       }
     }
   }
)

Zapytaj o dane dokumentu w określonym obszarze geometrycznym w kolekcji places.

Operator $geoIntersects

Różnica między $geoWithin polega na tym, że $geoIntersects służy do określenia, czy istnieje przecięcie między dwoma geometriami.

Format:

{
  <pole lokalizacji>: { // Pole przechowujące punkty współrzędnych geometrycznych
     $geoIntersects: {
        $geometry: {
           type: "<typ obiektu geojson>" , // Typ geometryczny
           coordinates: [ <współrzędne> ] // Zbiór punktów współrzędnych geometrycznych, zapytaj o dane z przecięciem z tą geometrią
        }
     }
  }
}

Przykład:

db.places.find(
   {
     loc: { // Pole loc przechowuje dane obszaru, który jest kształtem geometrycznym
       $geoIntersects: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [
               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Zapytaj o dane z przecięciem z tą geometrią
             ]
          }
       }
     }
   }
)