이 챕터에서는 MongoDB가 지리적 데이터를 저장하는 방법을 소개합니다. MongoDB의 지리적 쿼리 기능을 사용하려면 먼저 지리적 데이터를 저장하는 방법을 이해해야 합니다.

지리적 데이터는 주로 점, 선, 그리고 도형으로 구성됩니다.

지도상의 한 점은 경도와 위도 좌표로 정의됩니다. 여러 점이 모여 선을 형성하고, 여러 선이 다양한 모양을 형성할 수 있습니다.

실제 응용 프로그램에서는: 가게의 위치, "내가 어디에 있나요?", "학교가 어디에 있나요?"를 모두 좌표를 이용하여 나타낼 수 있습니다. 캠퍼스나 쇼핑몰의 범위를 설명하기 위해서는 도형이 필요합니다.

GeoJSON 객체

MongoDB는 지리적 정보를 나타내기 위해 GeoJSON 객체를 사용합니다.

일반적인 GeoJSON 유형은 다음과 같습니다:

  • Point - 좌표 점을 나타냄
  • LineString - 선을 나타냄
  • Polygon - 다각형을 나타냄

MongoDB 필드에 GeoJSON 객체를 저장하는 형식은 다음과 같습니다:

<field>: { type: <geojson type>, coordinates: <coordinates> }

설명:

  • - 필드 이름
  • type - GeoJSON 유형
  • coordinates - 좌표 점들의 배열. 서로 다른 GeoJSON 유형에 따라 형식이 다름

예시:

location: {
      type: "Point",  // 지리적 데이터의 유형, 이 경우에는 좌표 점입니다
      coordinates: [-73.856077, 40.848447] // 경도, 위도
}

설명: location 필드는 좌표 점 타입의 지리적 데이터를 저장합니다.

좌표 점 (Point)

형식:

{ type: "Point", coordinates: [ 경도, 위도 ] }

예시:

{ type: "Point", coordinates: [ 40, 5 ] }

선 (LineString)

형식:

{ type: "LineString", coordinates: [ 점1, 점2, ...] }

예시:

{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }

다각형 (Polygon)

하나 이상의 선으로 구성될 수 있습니다. 형식:

{
  type: "Polygon",
  coordinates: [ 
		선1,
		선2,
		....
	]
}

참고: 각 선 분할의 시작점과 끝점은 닫힌 모양을 형성하기 위해 동일해야 합니다.

하나의 선 분할로 이루어진 도형

{
  type: "Polygon",
  coordinates: [
  		[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0  ] ] // 선 분할의 좌표점, 첫 번째와 마지막 좌표는 동일함에 유의
	]
}

여러 선 분할로 이루어진 도형

{
  type : "Polygon",
  coordinates : [
     [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ], // 선 분할 1
     [ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]  // 선 분할 2
  ]
}

지리적 인덱스

MongoDB는 두 가지 유형의 지리적 인덱스를 지원하여 GeoJSON 데이터의 쿼리 속도를 높일 수 있습니다.

2dsphere

이는 구 형태의 지오메트리 인덱스 유형으로, 두 점 사이의 거리를 계산할 때 2dsphere는 지구를 구로 간주합니다.

2dsphere 인덱스를 생성하는 예시:

db.collection.createIndex( { location : "2dsphere" } )

location 필드에 대한 인덱스를 생성합니다.

2d

2D는 평면 지오메트리로, 두 점 사이의 거리를 평면상에 있는 것처럼 계산할 때 사용됩니다. 2D 인덱스를 생성하는 예시:

db.collection.createIndex( { location : "2d" } )

이는 location 필드에 대한 인덱스를 생성합니다.

지리적 쿼리 유형

지리적 쿼리는 모두 기하학적 계산과 관련이 있습니다. MongoDB에서 지원하는 쿼리 유형은 다음과 같습니다:

  • $geoIntersects - 특정 지리적 모양의 교차점과 일치하는 문서를 찾을 때 사용됩니다.
  • $geoWithin - 지정된 지리적 영역에 포함된 문서를 찾을 때 사용됩니다.
  • $near - 일반적으로 지정된 좌표 점에 가장 가까운 문서를 쿼리할 때 사용됩니다.

참고: 지리적 쿼리에 대한 자세한 정보는 다음 챕터를 참조하세요.