이 장에서는 MongoDB의 지리 공간 쿼리 함수 중 하나인, 거리를 기반으로 문서 데이터를 쿼리하는 방법을 소개합니다.

응용 시나리오: 근처 가게 검색 및 근처 사람 찾기.

사전 튜토리얼

MongoDB 지리 공간 데이터 저장 형식

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

  • 각 문서 데이터는 좌표 데이터를 저장하는 필드를 포함해야 합니다. 예를 들어: 위치 필드는 가게의 좌표를 저장합니다.
  • 2dsphere 또는 2d 공간 인덱스를 만듭니다.

$near 연산자

MongoDB는 $near 연산자를 사용하여 거리를 기반으로 문서 데이터를 쿼리합니다.

형식:

{
   <위치 필드>: { // 좌표 데이터를 저장하는 필드
     $near: {
       $geometry: { // 비교를 위한 참조 좌표 설정
          type: "Point" ,
          coordinates: [ 경도 , 위도 ]
       },
       $maxDistance: 미터 단위의 최대 거리,
       $minDistance: 미터 단위의 최소 거리
     }
   }
}

참고: $near 쿼리로 반환되는 데이터는 가까운 순서부터 정렬됩니다.

예시

shop 컬렉션에는 각 가게의 좌표가 저장된 위치 필드가 있는 가게 데이터가 저장되어 있다고 가정합니다. 다음 쿼리는 나에게 가장 가까운 가게를 찾습니다 (최소 거리 1000 미터, 최대 거리 5000 미터).

db.shop.find(
   {
     location:
       { $near :
          {
            $geometry: { type: "Point",  coordinates: [ -73.9667, 40.78 ] }, // 내 좌표
            $minDistance: 1000, // 최소 거리
            $maxDistance: 5000 // 최대 거리
          }
       }
   }
)