MongoDB에서 특정 값을 소문자로 검색하려면 JavaScript의 toLowerCase() 메서드를 활용하면 됩니다. 이 메서드를 find() 쿼리 안에 함께 사용하면, 대소문자 구분 없이 원하는 형태의 문자열 값을 손쉽게 조회할 수 있습니다.
1. 테스트용 컬렉션 생성 및 문서 삽입
먼저 예제 실습을 위해 컬렉션을 만들고 문서를 삽입해 보겠습니다. 아래 명령어는 demo172라는 컬렉션에 과목명(SubjectName)이 각각 다른 대소문자 조합으로 저장된 문서들을 추가합니다.
> db.demo172.insertOne({"SubjectName":"MySQL"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3838ce9e4f06af551997e1")
}
> db.demo172.insertOne({"SubjectName":"mongodb"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3838d69e4f06af551997e2")
}
> db.demo172.insertOne({"SubjectName":"MongoDB"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3838db9e4f06af551997e3")
}위 결과를 보면 세 개의 문서가 정상적으로 삽입되었으며, 각각 고유한 ObjectId가 부여된 것을 확인할 수 있습니다.
2. 컬렉션의 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo172.find();
위 명령어를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{ "_id" : ObjectId("5e3838ce9e4f06af551997e1"), "SubjectName" : "MySQL" }
{ "_id" : ObjectId("5e3838d69e4f06af551997e2"), "SubjectName" : "mongodb" }
{ "_id" : ObjectId("5e3838db9e4f06af551997e3"), "SubjectName" : "MongoDB" }현재 컬렉션에는 대소문자가 서로 다른 형태의 값들이 함께 저장되어 있습니다. MongoDB는 기본적으로 대소문자를 구분하기 때문에, 일반적인 조건으로는 원하는 값을 정확히 찾기 어려울 수 있습니다.
3. toLowerCase()를 사용해 소문자 값 검색하기
다음은 toLowerCase() 메서드를 적용하여 소문자 형태의 값을 조회하는 쿼리입니다. 검색 조건으로 전달하는 문자열에 toLowerCase()를 적용하면, 해당 문자열이 소문자로 변환된 상태로 비교됩니다.
> db.demo172.find({"SubjectName":"MONGODB".toLowerCase()});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e3838d69e4f06af551997e2"), "SubjectName" : "mongodb" }출력 결과를 보면 "MONGODB".toLowerCase()가 "mongodb"로 변환되어, SubjectName 필드가 정확히 소문자 "mongodb"인 문서만 조회된 것을 확인할 수 있습니다.
정리
MongoDB는 기본적으로 대소문자를 구분하므로, 소문자로 저장된 데이터를 검색할 때는 toLowerCase() 메서드를 활용하는 것이 효과적입니다. 반대로 필드에 저장된 값을 소문자로 변환한 뒤 비교하고 싶다면 집계 파이프라인의 $toLower 연산자나 정규식 옵션($regex의 i 옵션)을 함께 고려해 볼 수도 있습니다.