정의
$near지리 공간적 쿼리 가장 가까운 문서부터 가장 먼 문서까지 반환하는 점 지정합니다. 연산자 GeoJSON
$near포인트 또는 레거시 좌표 점 지정할 수 있습니다.$near지리 공간적 인덱스가 필요합니다.GeoJSON 점을 지정하는 경우2dsphere 인덱스입니다.
기존 좌표를 사용하여 점을 지정하는 경우 2d 인덱스입니다.
GeoJSON 포인트 지정하려면 연산자
$near2dsphere 인덱스 필요하며 구문은 다음과 같습니다.{ <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 } } )