이 장에서는 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 // 최대 거리
}
}
}
)