이 장에서는 MongoDB의 지리적 쿼리를 소개합니다. 이는 기하적 교차 및 포함 쿼리를 지원합니다.

응용 시나리오:

  • 지도 상에 원을 그리고 해당 원 내에 있는 데이터를 쿼리합니다.

사전 튜토리얼

MongoDB를 위한 지리적 데이터 저장 형식

거리를 기반으로 데이터를 쿼리하기 위한 사전 조건은 다음과 같습니다:

  • 각 문서 데이터에는 좌표 데이터를 저장하는 필드가 포함되어야 합니다. 예를 들어: 위치 필드는 상점의 좌표를 저장합니다.
  • 2dsphere 또는 2d 공간 색인을 생성합니다.

$geoWithin 연산자

이 연산자는 일반적으로 지정된 기하적 범위 내에 포함된 좌표 점을 쿼리하는 데 사용됩니다. 예: 지도 상에서 집을 검색할 때 지도에 영역을 그리고 해당 영역 내에 있는 집을 쿼리합니다.

구문 형식:

{
   <위치 필드>: { // 쿼리 필드
      $geoWithin: {
         $geometry: {
            type:  , // Polygon 또는 MultiPolygon만 지원됩니다.
            coordinates: [ <좌표> ]  // 기하적 좌표점의 컬렉션
         }
      }
   }
}

예:

db.places.find(
   {
     loc: { // loc 필드는 좌표 데이터를 저장합니다
       $geoWithin: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // 이 기하적 영역 내의 데이터를 찾습니다
          }
       }
     }
   }
)

places 컬렉션에서 지정된 기하적 영역 내의 문서 데이터를 쿼리합니다.

$geoIntersects 연산자

$geoWithin과의 차이점은 $geoIntersects가 두 기하학적 도형 간에 교차가 있는지를 결정하는 데 사용된다는 것입니다.

형식:

{
  <위치 필드>: { // 기하적 좌표점을 저장하는 필드
     $geoIntersects: {
        $geometry: {
           type: "<geojson 객체 유형>" , // 기하학적 유형
           coordinates: [ <좌표> ] // 기하적 좌표점의 컬렉션, 이 기하도형과 교차하는 데이터를 쿼리합니다
        }
     }
  }
}

예:

db.places.find(
   {
     loc: { // loc 필드는 기하학적 모양인 영역 데이터를 저장합니다
       $geoIntersects: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [
               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // 이 기하도형과 교차하는 데이터를 쿼리합니다
             ]
          }
       }
     }
   }
)