본문 바로가기

Database/mongoDB

$near

※ 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

 

$near — MongoDB Manual

 

docs.mongodb.com

 

'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