MongoDB에서 데이터베이스 이름에 하이픈(-)과 같은 특수 문자가 포함되어 있으면 use 명령만으로는 해당 데이터베이스를 제대로 다루기 어렵습니다. 이런 경우 getSiblingDB() 메서드를 사용하면 문제를 간단히 해결할 수 있습니다.
1. 특수 문자가 있는 데이터베이스 생성 및 문서 삽입
use customer_tracker-990 명령으로 데이터베이스를 전환한 뒤, insertOne() 메서드를 사용해 문서를 추가해 보겠습니다.
> use customer_tracker-990;
switched to db customer_tracker-990
> db.demo1.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea4697ca7e81adc6a0b3954")
}
> db.demo1.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea46980a7e81adc6a0b3955")
}
> db.demo1.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea46984a7e81adc6a0b3956")
}
위 실행 결과를 보면 세 개의 문서가 모두 성공적으로 삽입되었으며, 각 문서에는 고유한 ObjectId가 자동으로 부여됩니다.
2. getSiblingDB()로 데이터 조회하기
특수 문자가 포함된 데이터베이스의 컬렉션에서 문서를 조회하려면 find() 메서드와 함께 getSiblingDB()를 사용합니다.
> db.getSiblingDB("customer_tracker-990").demo1.find();
이 명령을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
{ "_id" : ObjectId("5ea4697ca7e81adc6a0b3954"), "Name" : "Chris" }
{ "_id" : ObjectId("5ea46980a7e81adc6a0b3955"), "Name" : "David" }
{ "_id" : ObjectId("5ea46984a7e81adc6a0b3956"), "Name" : "Bob" }
정리
데이터베이스 이름에 하이픈 같은 특수 문자가 들어 있을 때는 db.getSiblingDB("데이터베이스명") 형태로 접근하는 것이 가장 안전하고 확실한 방법입니다. 이 방식은 셸 환경에서 특수 문자로 인한 파싱 오류 없이 데이터베이스와 컬렉션에 직접 접근할 수 있게 해줍니다.