최근 프로젝트에서 MongoDB를 사용하여 위치 기반 검색 기능을 구현해야 했습니다. 이를 위해 MongoDB의 $geoNear 쿼리를 사용하기로 했고, 이를 위해서는 해당 필드에 지오스페셜 인덱스를 생성해야 한다는 사실을 알게 되었습니다.
planner returned error :: caused by :: unable to find index for $geoNear query' on server ~~. The full response is {"ok": 0.0, "errmsg": "error processing query: ns=mobby.geoLocations limit=2Tree: GEONEAR field=position maxdist=200 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error :: caused by :: unable to find index for $geoNear query", "code": 291, "codeName": "NoQueryExecutionPlans"}
현재 오류는 'position' 필드에 대해 지오스페셜 인덱스가 없기 때문에 발생합니다.
다음은 그 과정을 정리한 내용입니다.
먼저 터미널을 열고 MongoDB 셸에 접속합니다.
mongosh
작업할 데이터베이스를 선택합니다. 여기서는 mobby
데이터베이스를 선택합니다.
use mobby
geoLocations
컬렉션의 position
필드에 대해 2dsphere 인덱스를 생성합니다.
db.geoLocations.createIndex({ position: "2dsphere" })
이제 position
필드에 대한 인덱스가 생성되었으므로 $geoNear 쿼리를 사용할 수 있습니다.
서버에서 MongoDB가 실행 중인지 확인하고, 실행 중이 아니라면 서버를 시작합니다.
# MongoDB 상태 확인
systemctl status mongod
# MongoDB 서버 시작
sudo systemctl start mongod
이 과정을 통해 MongoDB에서 위치 기반 검색을 위한 준비를 마쳤습니다.
이번 과정을 통해 MongoDB에서 지오스페셜 인덱스를 생성하고 $geoNear 쿼리를 사용하는 방법을 익히게 되었습니다. 이를 통해 다음과 같은 성장을 이룰 수 있었습니다.
이번 경험을 통해 데이터베이스 인덱스와 위치 기반 서비스에 대한 이해도가 크게 향상되었으며, 이를 바탕으로 더 나은 서비스를 개발할 수 있는 역량을 갖추게 되었습니다.