위도 경도를 입력해 놓고,
위치 순으로 정렬해야 되는 경우가 많다.
현재 위치에서 가까운 순으로 정렬해서 가게 목록을 보여줘야 할때,
RDB에서는 위도 경도를 가지고, Sin, Cos 계산식으로 거리 및 가까운 정렬을 계산 했었는데,
몽고디비에서는 아에 지원을 해주는 기능이 있어서, 계산을 안해도 된다.
구글에서 MongoDB geoSearch를 검색하면 설명이 있다.
인터넷에 있는 설명들은 쿼리만 있고,
Document 구조들이 다 같은거만 설명이 있는데....
나같은 경우는 위도 경도 필드를 분리해 놓아서.....
인터넷에 있는 설명들이랑 좀 다르게 적용해야했다.
결국 위도 경도를 하나의 Array로 합치기는 했지만,
이 기능을 사용하기 위해서는, 위도 경도를 한 필드에 Array로 값을 넣어야한다.
그리고, 지형 인덱스를 걸어 놓아야 된다.
값을 넣을때, 예로, [경도,위도] 이렇게 넣어야한다.
내 document는
address 필드 안에 map 이 있고, 그 아래, location 필드에 위도 경도 정보를 넣어 놓았다.
{address: {
map: {
location: [126.899309,34.4392949]
}
}
}
이렇게 들어가 있다고 치고,
location에 2dshpere 인덱스를 걸어야한다.
쿼리명령어는 다른 사이트에 설명이 많으니, 난 MongoDB Compass에서 하는법을 설명하겠다.
(이게 편하긴하다.)
몽고디비 보면, 인덱스 탭이 있고,
왼쪽에 보면, "CREATE INDEX" 가 있고, 누르면,
아래창이 뜬다.
인덱스명을 적고,
필드는 아까 , address.map.location 를 선택하고, 옆에 타입에 2dsphere를 꼭 선택해야한다.
자... 이제, 이거를 가까운 순으로 정렬을해보자~
Compass에서 볼때는
filter에
{"address.map.location":{$nearSphere:[127.123434,33.334444]}}
이렇게 입력하면, 저 입력된 위치랑 제일 가까운 데이터 부터 보여준다.
쿼리는
>db.place.find({"address.map.coordinates":{$nearSphere:[127.123434,33.334444]}})
이렇게 하면 값이 뜬다.
'컴퓨터 > MongoDB' 카테고리의 다른 글
MongoDB 여러개 업데이트 (0) | 2021.04.01 |
---|