먼저 GeoSpatial index에 대해서 알아보자.
GeoSpatial index는 2차원, 3차원에서 특정 좌표값을 잡고 그 주위 값을 어떤 모양으로 선정할 것인지를 선택하는 방법이다. '내가 있는 위치의 근처에 있는 맛집 찾기', '서울에서 부산을 가는데 가장 빠른 경로 찾기' 등에 이용되는 방법이다.
아래는 MongoDB에서 해볼 수 있는 2차원 GeoSpatial index 예제이다.
메서드 별로 주석을 달아놨으니 쉽게 이해할 수 있을 것이다.
============================ MongoDB ============================
// GeoSpatial index
// 100개(0,0 ~ 9,9) 데이터를 저장한다.
for(var i=0 ; i<100 ; i++)
// pos: [0 ~ 9, 0 ~ 9] <- 이런 형태의 데이터가 나온다.
db.spatial.insert({pos:[i % 10, Math.floor(i / 10)]})
db.spatial.find()
// index 생성
db.spatial.ensureIndex({pos:"2d"}) // ensureIndex()로 이차원 인덱스 평면을 만든다.
// 중심점(5,5)에서 가까이 있는 5개의 위치 찾아보자
db.spatial.find({pos:{$near:[5,5]}},{_id:0}).limit(5) // 중심점의 전후좌우의 데이터까지 총 5개가 나온다.
// 중심점(5,5)을 기준으로 반지름이 2만큼 떨어져 있는 위치를 찾아보자
db.spatial.find({pos:{$within :{$center:[[5,5],2]}}},{_id:0})
// 시작점의 위치 끝나는점의 안에 위치를 찾아보자
db.spatial.find({pos:{$within :{$box:[[5,5],[6,6]]}}},{_id:0}) // [5,5],[5,6],[6,5],[6,6] 내에 있는 점을 찾는다.
// 다각형 위치 안에 있는 위치를 찾아보자
db.spatial.find({pos:{$within :
{$polygon:[[3,3],[5,7],[7,4]]}}}, // 꼭지점이 [3,3],[5,7],[7,4]인 삼각형 안에 있는 정수쌍을 찾는다.
{_id:0}
============================ MongoDB ============================
'데이터베이스' 카테고리의 다른 글
[MongoDB] MapReduce에 관한 정리 (0) | 2018.06.16 |
---|---|
[MongoDB] 시퀀스와 게시판 페이징처리 및 CRUD (0) | 2018.06.15 |
[Mybatis] root-context.xml 자료(Oracle) (0) | 2018.05.20 |
[Mybatis] pom.xml 자료(Oracle) (0) | 2018.05.20 |
MongoDB에 계정(유저) 추가하기 (0) | 2018.04.17 |