인덱스 2dsphere
쿼리
다음 섹션에서는 2dsphere
인덱스에서 지원하는 쿼리에 대해 설명합니다.
다각형으로 묶인 GeoJSON 객체
$geoWithin
연산자 는 GeoJSON 다각형 내에서 발견된 위치 데이터를 쿼리합니다. 위치 데이터는 GeoJSON 형식으로 저장해야 합니다. 다음 구문을 사용합니다.
db.<collection>.find( { <location field> : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ <coordinates> ] } } } } )
다음 예에서는 완전히 GeoJSON 다각형 내에 존재하는 모든 점과 모양을 선택합니다.
db.places.find( { loc : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
GeoJSON 객체의 교차점
$geoIntersects
연산자는 지정된 GeoJSON 객체와 교차하는 위치를 쿼리합니다. 교차점이 비어 있지 않은 경우 위치는 객체와 교차합니다. 여기에는 가장자리를 공유하는 문서가 포함됩니다.
$geoIntersects
연산자는 다음 구문을 사용합니다:
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>" , coordinates : [ <coordinates> ] } } } } )
다음 예제에서는 $geoIntersects
를 사용하여 coordinates
배열로 정의된 다각형과 교차하는 모든 인덱스 점과 모양을 선택합니다.
db.places.find( { loc : { $geoIntersects : { $geometry : { type : "Polygon" , coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
GeoJSON 포인트에 대한 근접성
근접 쿼리는 정의된 지점에 가장 가까운 지점을 반환하고 거리를 기준으로 결과를 정렬합니다. GeoJSON 데이터에 대한 근접 쿼리에는 2dsphere
인덱스가 필요합니다.
GeoJSON 포인트에 대한 근접성을 쿼리하려면 $near
연산자를 사용합니다. 거리는 미터 단위입니다.
$near
는 다음 구문을 사용합니다:
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point" , coordinates : [ <longitude> , <latitude> ] } , $maxDistance : <distance in meters> } } } )
예를 보려면 $near
을(를) 참조하세요.
$nearSphere
연산자 및 $geoNear
집계 파이프라인 단계도 참조하세요.
구에 정의된 원 내의 점
구의 "구형 대문자" 안의 모든 격자 좌표를 선택하려면 연산자와 함께 를 $geoWithin
$centerSphere
사용합니다. 다음을 포함하는 배열을 지정합니다.
원 중심점의 격자 좌표
라디안 단위로 측정한 원의 반지름입니다. 라디안을 계산하려면 구형 기하학을 사용하여 거리 계산을 참조하세요.
다음 구문을 사용합니다.
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
다음 예제에서는 그리드 좌표를 쿼리하고 경도 88 W
및 위도 30 N
반경 10마일 내의 모든 문서를 반환합니다. 이 예에서는 지구의 대략적인 적도 반경인 3963.2마일을 나누어 거리인 10마일을 라디안으로 변환합니다.
db.places.find( { loc : { $geoWithin : { $centerSphere : [ [ -88 , 30 ] , 10 / 3963.2 ] } } } )