이 장에서는 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 ] ] // 이 기하도형과 교차하는 데이터를 쿼리합니다
]
}
}
}
}
)