구의 원 내 위치 쿼리하기
구 표면의 원 내에서 위치 데이터를 쿼리할 수 있습니다. 이 쿼리를 사용하여 구형 대문자 내의 데이터를 반환합니다.
구의 원 내의$geoWithin
위치 $centerSphere
데이터를 쿼리하려면 연산자와 함께 를 사용합니다. 연산자에서 $centerSphere
쿼리할 원의 좌표와 반지름을 지정합니다.
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere: [ [ <longitude>, <latitude> ], <radius> ] } } } )
이 작업에 대하여
경도와 위도 좌표를 지정할 때는 경도를 먼저 입력한 다음 위도를 입력합니다.
유효한 경도 값은
-180
~180
입니다(둘 모두 포함).유효한 위도 값은
-90
~90
입니다(둘 모두 포함).
$centerSphere
연산자에서 원의 반지름을 라디안 단위 로 지정합니다. 다른 단위를 라디안으로 변환하려면 구형 연산자에 대해 거리를 라디안으로 변환을 참조하세요.이 예제에서는 거리를 킬로미터 단위로 계산합니다. 킬로미터를 라디안으로 변환하려면 킬로미터 값을
6378.1
으로 나눕니다.
$geoWithin
지리 공간적 공간 인덱스가 필요하지 않습니다. 그러나 지리 공간적 공간 인덱스는 쿼리 성능을 향상시킵니다. 2dsphere 지리 공간적 인덱스만$geoWithin
을 지원합니다. 자세한 내용은 2dsphere 인덱스 만들기를 참조하세요.
시작하기 전에
이러한 문서가 포함된 places
컬렉션을 만듭니다.
db.places.insertMany( [ { loc: { type: "Point", coordinates: [ -73.97, 40.77 ] }, name: "Central Park", category : "Park" }, { loc: { type: "Point", coordinates: [ -73.88, 40.78 ] }, name: "La Guardia Airport", category: "Airport" }, { loc: { type: "Point", coordinates: [ -1.83, 51.18 ] }, name: "Stonehenge", category : "Monument" } ] )
절차
collection을 쿼리하려면 $centerSphere
연산자와 함께 $geoWithin
를 사용합니다.
db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ -1.76, 51.16 ], 10 / 6378.1 ] } } } )
쿼리는 loc
필드가 경도 -1.76
, 위도 51.16
에 있는 점에서 반경 10킬로미터 이내에 있는 문서를 반환합니다.
출력:
[ { _id: ObjectId("63fd205e4a08b5e248c03e32"), loc: { type: 'Point', coordinates: [ -1.83, 51.18 ] }, name: 'Stonehenge', category: 'Monument' } ]