※ MongoDB 공식 매뉴얼에 나와있는 $near 부분을 번역해 보도록 하겠습니다. 번역을 안하는게 나을 것 같은 용어들은 한번만 번역하거나 그대로 두었습니다.
Definition (정의)
$near
geospatial query 가 가장 가까운 곳에서 가장 먼 곳 까지의 documents 를 반환하는 point 를 지정합니다. $near 연산자는 GeoJSON point 혹은 레거시 좌표 point 를 명시할 수 있습니다.
$near 연산자는 geospatial index 를 필요로 합니다 :
- 2dsphere index 는 GeoJSON point 를 지정할때
- 2d index 는 레거시 좌표를 사용한 point 를 지정할때
GeoJSON point 를 지정하기 위해, $near 연산자는 2dsphere index 를 필요로 하며 다음의 문법을 따릅니다 :
{
<location field>: {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ <longitude> , <latitude> ]
},
$maxDistance: <distance in meters>,
$minDistance: <distance in meters>
}
}
}
위도 - 경도 좌표를 지정한다면 경도 - 위도 순서대로 입력해야 합니다 :
- -180 <= 경도 <= 180
- -90 <= 위도 <= 90
GeoJSON point 를 지정할때, 옵션으로 $minDistance 와 $maxDistance 를 사용하여 $near 연산의 결과를 미터단위의 거리에 따라 제한 할 수 있습니다 :
- $minDistance 는 중심점으로부터 적어도 지정한 거리만큼은 떨어진 documents 를 반환하도록 제한합니다.
- $maxDistance 는 중심점으로부터의 거리가 지정한 거리를 넘지 않는 documents 를 반환하도록 제한합니다.
기존 좌표를 사용해 point 를 지정하기위해선, $near 연산자는 2d index 를 필요로 하며 다음의 문법을 따릅니다 :
{
$near: [ <x>, <y> ],
$maxDistance: <distance in radians>
}
기존 좌표를 지정할 때, 옵션으로 $maxDistance 스펙을 사용해 라디안 단위의 거리에 따라 $near 의 결과를 제한할 수 있습니다. $maxDistance 는 중심점으로부터의 거리가 지정한 거리를 넘지 않는 documents 를 반환하도록 제한합니다.
Behavior (동작)
Special Indexes Restriction (특수 인덱스 제한)
특수 geospatial index 를 필요로 하는 $near 연산자는 또다른 특수 인덱스를 필요로 하는 쿼리연산자나 명령어와 결합할 수 없습니다.
예시로 $near 과 $text 쿼리는 결합할 수 없습니다.
Sharded Collections (샤드된 콜렉션)
MongoDB 4.0 부터 샤드된 콜렉션에 $near 쿼리가 지원됩니다.
이전 MongoDB 버전에선, 샤드된 콜렉션에 $near 쿼리가 지원되지 않았습니다. 대신에, 샤드된 클러스터에서 $geoNear aggregation stage 또는 geoNear 명령어를 사용해야 했습니다. (MongoDB 4.0 과 이전 버전에서 사용 가능)
Sort Operation (정렬 연산)
$near 쿼리는 documents 를 거리에 따라 정렬합니다. 만약 쿼리에 sort() 를 포함하고 있다면, sort() 는 이미 $near 에 의해 수행된 정렬 연산을 효과적으로 재정의하여 매칭된 documents 를 재정렬합니다. geospatial query 와 함께 sort() 를 사용할 땐, $near 을 사용하는 대신 documents 를 정렬하지 않는 $geoWithin 연산자 사용을 고려해 보십시오.
관련 문서 : 2d Indexes and Geospatial Near Queries
Examples (예제)
Query on GeoJSON Data (GeoJSON Data 에 대한 쿼리)
중요
위도 - 경도 좌표 지정할땐 경도 - 위도 순서로 :
- -180 <= 경도 <= 180
- -90 <= 위도 <= 90
places 콜렉션이 2dsphere index 를 갖고 있다고 가정합니다.
다음의 예시는 지정된 GeoJSON point 로부터 최소 1000m 부터 최대 5000m 거리의 documents 를 가까운 것에서 먼 순서로 정렬해 반환합니다 :
db.places.find(
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 1000,
$maxDistance: 5000
}
}
}
)
Query on Legacy Coordinates (레거시 좌표에 대한 쿼리)
중요
위도 - 경도 좌표 지정할땐 경도 - 위도 순서로 :
- -180 <= 경도 <= 180
- -90 <= 위도 <= 90
legacy2d 콜렉션이 2d index 를 갖고 있다고 가정합니다.
다음의 예시는 지정된 레거시 좌표 쌍으로부터 최대 0.10 라디안만큼 떨어진 documents 를 가까운 것에서 먼 순서로 정렬해 반환합니다 :
db.legacy2d.find(
{ location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }
)
출처 : https://docs.mongodb.com/manual/reference/operator/query/near/#op._S_near
'Database > mongoDB' 카테고리의 다른 글
$box (0) | 2020.04.12 |
---|---|
$nearSphere (0) | 2020.04.09 |
$geoWithin (0) | 2020.03.31 |
$geoIntersects (0) | 2020.03.25 |
Geospatial Query Operators (Geospatial 쿼리 연산자) (0) | 2020.03.25 |