구의 지정된 점 근처에 나타나는 위치 데이터를 쿼리 할 수 있습니다.
지정된 점 근처의 위치 데이터를 쿼리 하려면 $near 연산자 를 사용합니다.
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point", coordinates : [ <longitude>, <latitude> ] }, $maxDistance : <distance in meters> } } } )
이 작업에 대하여
경도와 위도 좌표를 지정할 때는 경도를 먼저 입력한 다음 위도를 입력합니다.
유효한 경도 값은
-180~180입니다(둘 모두 포함).유효한 위도 값은
-90~90입니다(둘 모두 포함).
$maxDistance필드에 거리를 미터 단위 로 지정합니다.
시작하기 전에
이러한 문서가 포함된
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" } ] ) loc필드의 값은 GeoJSON 포인트입니다.$near연산자 를 사용하여 위치 데이터를 쿼리 하려면 위치 데이터가 포함된 필드 에 지리 공간적 인덱스 를 만들어야 합니다.loc필드 에 2dsphere 인덱스 를 생성합니다.db.places.createIndex( { "loc": "2dsphere" } )
절차
컬렉션 을 쿼리 하려면 $near 를 사용합니다. 다음 $near 쿼리 는 [ -73.92, 40.78 ] 에 있는 GeoJSON 포인트 에서 5000 loc 필드 가 있는 문서를 반환합니다.
db.places.find( { loc: { $near: { $geometry: { type: "Point", coordinates: [ -73.92, 40.78 ] }, $maxDistance : 5000 } } } )
출력:
[ { _id: ObjectId("63f7c3b15e5eefbdfef81cab"), loc: { type: 'Point', coordinates: [ -73.88, 40.78 ] }, name: 'La Guardia Airport', category: 'Airport' }, { _id: ObjectId("63f7c3b15e5eefbdfef81caa"), loc: { type: 'Point', coordinates: [ -73.97, 40.77 ] }, name: 'Central Park', category: 'Park' } ]
결과는 쿼리된 점 으로부터의 거리를 기준으로 가장 가까운 것부터 가장 먼 것 순으로 정렬됩니다.