먼저 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 ============================

+ Recent posts