$nearSphere
정의
$nearSphere
지리 공간적 쿼리가 가장 가까운 문서부터 가장 먼 문서 순으로 반환하는 지점을 지정합니다. MongoDB는 구형 기하학을 사용하여
$nearSphere
의 거리를 계산합니다.$nearSphere
지리적 공간 인덱스가 필요합니다.GeoJSON 포인트로 정의된 위치 데이터에 대한 2dsphere 인덱스
legacy coordinate pairs로 정의된 위치 데이터에 대한 2D 인덱스입니다. GeoJSON 포인트 에 2D 인덱스를
coordinates
사용하려면 GeoJSON 객체의 필드에 인덱스를 생성합니다.
$nearSphere
연산자는 GeoJSON 포인트 또는 레거시 좌표 점 중 하나를 지정할 수 있습니다.GeoJSON 포인트를 지정하려면 다음 구문을 사용합니다.
{ $nearSphere: { $geometry: { type : "Point", coordinates : [ <longitude>, <latitude> ] }, $minDistance: <distance in meters>, $maxDistance: <distance in meters> } } 선택 사항인
$minDistance
는 중심점에서 최소 지정된 거리에 있는 문서로 결과를 제한합니다.각 인덱스에 대해 선택 사항인
$maxDistance
를 사용할 수 있습니다.
기존 좌표를 사용하여 포인트를 지정하려면 다음 구문을 사용합니다.
{ $nearSphere: [ <x>, <y> ], $minDistance: <distance in radians>, $maxDistance: <distance in radians> } 선택 사항인
$minDistance
는 쿼리가 2D 구 인덱스를 사용하는 경우에만 사용할 수 있습니다.$minDistance
는 중심점에서 최소 지정된 거리에 있는 문서로 결과를 제한합니다.각 인덱스에 대해 선택 사항인
$maxDistance
를 사용할 수 있습니다.
레거시 좌표에 경도와 위도를 사용하는 경우 경도를 먼저 지정한 다음 위도를 지정합니다.
행동
특별 인덱스 제한
특수 지리 공간적 인덱스가 필요한 연산자는 다른 특수 인덱스가 필요한 $nearSphere
쿼리 연산자 또는 명령과 결합할 수 없습니다. 예를 들어, $nearSphere
와 $text
쿼리를 결합할 수 없습니다.
정렬 작업
$nearSphere
} 연산자는 거리별로 문서를 거리 기준으로 정렬합니다.
쿼리에
sort()
메서드를 사용하는 경우 MongoDB는 두 번째 정렬 작업을 수행하여 일치하는 문서의 순서를 다시 지정합니다. 대규모 컬렉션을 쿼리할 경우 쿼리 성능에 부정적인 영향을 미칠 수 있습니다.문서의 순서가 중요하지 않은 경우, 정렬되지 않은 결과를 반환하는
$geoWithin
연산자를 대신 사용하는 것이 좋습니다.$nearSphere
일치 실행 연산자이며 집계 파이프라인에서는 허용되지 않습니다.
예제
GeoJSON을 사용하여 중심점 지정
location
필드가 있는 문서를 고 포함하2D 구 인덱스가 있는 컬렉션 places
를 가정해 보겠습니다.
그런 다음 다음 예시에서는 지정된 지점에서 최소 1000
미터에서 최대 5000
미터 떨어진 location
을 가장 가까운 곳에서 가장 먼 곳 순으로 반환합니다.
db.places.find( { location: { $nearSphere: { $geometry: { type : "Point", coordinates : [ -73.9667, 40.78 ] }, $minDistance: 1000, $maxDistance: 5000 } } } )
레거시 좌표를 사용하여 중심점 지정
2d
인덱스
location
필드에 레거시 좌표 쌍이 있는 문서를 포함하고 2D 인덱스가 있는 컬렉션 legacyPlaces
경우를 가정해 보겠습니다.
그런 다음 다음 예시에서는 지정된 지점에서 location
이 최대 0.10
라디안인 문서를 가장 가까운 것부터 가장 먼 것까지 순서대로 반환합니다.
db.legacyPlaces.find( { location : { $nearSphere : [ -73.9667, 40.78 ], $maxDistance: 0.10 } } )
2dsphere
인덱스
컬렉션에 대신 2dsphere
인덱스가 있는 경우 선택 사항인 $minDistance
사양을 지정할 수도 있습니다. 예를 들어, 다음 예에서는 location
이 지정된 지점으로부터 최소 0.0004
라디안인 문서를 가장 가까운 것부터 가장 먼 것 순으로 반환합니다.
db.legacyPlaces.find( { location : { $nearSphere : [ -73.9667, 40.78 ], $minDistance: 0.0004 } } )