'몽고디비 지형쿼리'에 해당되는 글 1건

  1. 2021.04.02 몽고디비 위도 경도 정렬 (위치기반 쿼리)
2021. 4. 2. 11:33

위도 경도를 입력해 놓고,

 

위치 순으로 정렬해야 되는 경우가 많다.

 

현재 위치에서 가까운 순으로 정렬해서 가게 목록을 보여줘야 할때,

 

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
Posted by Tyson