정의
$near지리 공간적 쿼리에서 가장 가까운 문서부터 가장 먼 문서까지 반환할 포인트를 지정합니다.
$near연산자는 GeoJSON 포인트 또는 레거시 좌표 포인트 중 하나를 지정할 수 있습니다.$near지리 공간적 인덱스가 필요합니다.GeoJSON 점을 지정하는 경우2dsphere 인덱스입니다.
기존 좌표를 사용하여 점을 지정하는 경우 2d 인덱스입니다.
GeoJSON 포인트를 지정하려면
$near연산자에 2dsphere 인덱스가 필요하며 구문은 다음과 같습니다:{ <location field>: { $near: { $geometry: { type: "Point" , coordinates: [ <longitude> , <latitude> ] }, $maxDistance: <distance in meters>, $minDistance: <distance in meters> } }}중요
위도 및 경도 좌표를 지정하는 경우 경도를 먼저 나열한 다음 위도를 나열합니다.
유효한 경도 값은
-180~180입니다(둘 모두 포함).유효한 위도 값은
-90~90입니다(둘 모두 포함).
GeoJSON 포인트를 지정할 때는 선택 사항인
$minDistance및$maxDistance사양을 사용하여$near결과를 미터 단위의 거리로 제한할 수 있습니다.$minDistance중심점에서 최소 지정된 거리에 있는 문서로 결과를 제한합니다.$maxDistance중심점에서 최대 지정된 거리에 있는 문서로 결과를 제한합니다.
레거시 좌표를 사용하여 점을 지정하려면
$near에 2D 인덱스가 필요하며 구문은 다음과 같습니다.{ $near: [ <x>, <y> ], $maxDistance: <distance in radians>}레거시 좌표를 지정할 때 선택 사항인
$maxDistance지정을 사용하여 라디안 단위의 거리로$near결과를 제한할 수 있습니다.$maxDistance중심점에서 최대 지정된 거리에 있는 문서로 결과를 제한합니다.
행동
특별 인덱스 제한
특수 지리 공간적 인덱스가 필요한 연산자는 다른 특수 인덱스가 필요한 $near 쿼리 연산자 또는 명령과 결합할 수 없습니다. 예를 들어, $near와 $text 쿼리를 결합할 수 없습니다.
정렬 작업
$near} 연산자는 거리별로 문서를 거리 기준으로 정렬합니다.
쿼리에
sort()메서드를 사용하는 경우 MongoDB는 두 번째 정렬 작업을 수행하여 일치하는 문서의 순서를 다시 지정합니다. 대규모 컬렉션을 쿼리할 경우 쿼리 성능에 부정적인 영향을 미칠 수 있습니다.문서의 순서가 중요하지 않은 경우, 정렬되지 않은 결과를 반환하는
$geoWithin연산자를 대신 사용하는 것이 좋습니다.$near일치 실행 연산자이며 집계 파이프라인에서는 허용되지 않습니다.
유효성 검사
MongoDB 8.0부터 $near, $nearSphere, 및 $geoNear는 지정된 GeoJSON 포인트의 타입이 Point인지 검증합니다. 다른 입력 유형은 오류를 반환합니다.
메모리 사용량
MongoDB 9.0부터, MongoDB는 $near가 결과를 버퍼링하고 중복 기록을 제거하는 데 사용하는 메모리를 추적합니다. 쿼리가 해당 단계의 100 메가바이트 메모리 제한을 초과하면 MongoDB는 쿼리를 종료하고 오류를 반환합니다.
많은 수의 문서와 일치하는 쿼리만 제한에 걸립니다. 쿼리에 필요한 메모리를 줄이려면 maxDistance을(를) 지정하여 검색 영역을 제한합니다. 이 메모리는 작업별 메모리 제한에 포함됩니다. 자세한 내용은 작업별 메모리 제한을 참조하세요.
예시
GeoJSON 데이터에 대한 쿼리
중요
위도 및 경도 좌표를 지정하는 경우 경도를 먼저 나열한 다음 위도를 나열합니다.
유효한 경도 값은
-180~180입니다(둘 모두 포함).유효한 위도 값은
-90~90입니다(둘 모두 포함).
2dsphere 인덱스가 있는 컬렉션 places를 고려합니다.
다음 예에서는 지정된 GeoJSON 지점에서 최소 1000 미터, 최대 5000 미터 떨어진 문서를 가장 가까운 것부터 가장 먼 것까지 정렬하여 반환합니다.
db.places.find( { location: { $near : { $geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, $minDistance: 1000, $maxDistance: 5000 } } })레거시 좌표에 대한 쿼리
중요
위도 및 경도 좌표를 지정하는 경우 경도를 먼저 나열한 다음 위도를 나열합니다.
유효한 경도 값은
-180~180입니다(둘 모두 포함).유효한 위도 값은
-90~90입니다(둘 모두 포함).
2d 인덱스가 있는 컬렉션 legacy2d를 고려합니다.
다음 예에서는 지정된 레거시 좌표 쌍에서 최대 0.10 라디안인 문서를 가장 가까운 것부터 가장 먼 것 순으로 정렬하여 반환합니다.
db.legacy2d.find( { location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } })