지리 공간 검색 사용

MongoDB 호환 작업에서 지리 공간 쿼리를 사용하여 특정 경도와 위도에서 특정 범위 내에 있는 문서를 쿼리합니다.

시작하기 전에

  1. 기존 MongoDB 호환 작업 데이터베이스에 액세스할 수 있는지 확인하거나 데이터베이스를 만들고 연결합니다.

  2. 2dsphere 색인이 하나 이상 있는지 확인하거나 2dsphere 색인을 만듭니다.

GeoJSON 객체

컬렉션의 필드에 대해 지리 공간 쿼리를 실행하려면 쿼리하는 필드가 GeoJSON 객체 또는 GeoPoint여야 합니다.

문서 내 지리 좌표를 기준으로 지리 좌표의 거리를 계산하는 $near 연산자를 사용하여 지리 공간 쿼리를 실행할 수 있습니다. 그런 다음 이러한 문서가 쿼리 결과에서 가장 가까운 거리부터 가장 먼 거리 순으로 정렬됩니다. 쿼리에서 $natural 이외의 보조 정렬을 정의하여 이 정렬 순서를 재정의할 수도 있습니다. $near 연산자는 쿼리 필터의 문서 필드에 있어야 하며 $geometry GeoJSON 필드를 포함해야 합니다.

다음 예에서는 $near 연산자를 사용하여 지리 좌표 (-122.084, 37.4221)myCollection.의 모든 문서에 있는 location 필드의 지리 좌표 간 거리를 계산합니다. 문서가 반환되고 두 점 사이의 거리가 가까운 순서대로 정렬됩니다.

  db.myCollection.find({
    location: {
      $near: {
        $geometry: {
          type: 'Point',
          coordinates: [ -122.084, 37.4221 ]
        }
      }
    }
  }
  )

선택사항인 $maxDistance$minDistance 필드를 사용하여 쿼리 지점으로부터의 거리를 미터 단위로 제어할 수도 있습니다. 다음 예는 반환된 문서가 지점 (-122.084, 37.4221)에서 최소 500미터, 최대 2,000미터 떨어져야 하는 쿼리를 보여줍니다.

  db.myCollection.find({
    location: {
      $near: {
        $geometry: {
          type: 'Point',
          coordinates: [ -122.084, 37.4221 ]
        },
        $maxDistance: 2000,
        $minDistance: 500
      }
    }
  }

인덱스가 파티션으로 나뉘어 있는 경우 쿼리 내의 'and' 등호 필터에 파티션을 포함하여 파티션을 기준으로 필터링할 수 있습니다. 예를 들어 region 파티션이 있고 midwest 리전별로 쿼리 결과를 필터링하려면 다음을 실행하면 됩니다.

  db.myCollection.find( { $and: [
    { location:
      { $near: {
        $geometry: {
          type: 'Point',
          coordinates: [ -122.084, 37.4221 ]
        },
      }
    },
    { "region": "midwest" }
  ] } )

파티션 값은 문자열이어야 합니다. 파티션 필터는 $and 연산자를 사용하여 검색어에 조인해야 합니다.

제한사항

  • $near 연산자와 $text 연산자는 동일한 쿼리에서 사용할 수 없습니다.
  • $near$or 절의 유일한 표현식이 아닌 경우 다중 절 $or 문에 $near을 중첩할 수 없습니다.
  • $near는 쿼리에서 $not 또는 $nor 연산자와 함께 사용할 수 없습니다.
  • $near은 집계 쿼리에서 지원되지 않습니다.