MongoDB에서 대소문자 구분 없이 쿼리하는 방법
MongoDB에서 대소문자를 구분하지 않고 데이터를 검색하려면 정규식(regex)을 활용하면 됩니다. 정규식에 i 옵션(case-insensitive)을 추가하면 대문자와 소문자를 가리지 않고 원하는 문자열을 조회할 수 있습니다.
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo314.insertOne({"Name":"Chris brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50d742f8647eb59e562056")
}
> db.demo314.insertOne({"Name":"David Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50d743f8647eb59e562057")
}
> db.demo314.insertOne({"Name":"CHRIS BROWN"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50d744f8647eb59e562058")
}
> db.demo314.insertOne({"Name":"DAVID MILLER"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50d747f8647eb59e562059")
}
> db.demo314.insertOne({"Name":"chris brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50d749f8647eb59e56205a")
}위 예제에서는 동일한 이름이 서로 다른 대소문자 조합으로 저장되어 있습니다. 이제 find() 메서드를 사용해 컬렉션의 모든 문서를 확인해 보겠습니다.
> db.demo314.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e50d742f8647eb59e562056"), "Name" : "Chris brown" }
{ "_id" : ObjectId("5e50d743f8647eb59e562057"), "Name" : "David Miller" }
{ "_id" : ObjectId("5e50d744f8647eb59e562058"), "Name" : "CHRIS BROWN" }
{ "_id" : ObjectId("5e50d747f8647eb59e562059"), "Name" : "DAVID MILLER" }
{ "_id" : ObjectId("5e50d749f8647eb59e56205a"), "Name" : "chris brown" }대소문자를 구분하지 않는 쿼리 실행하기
이제 정규식에 i 플래그를 붙여 대소문자 구분 없이 검색하는 쿼리를 살펴보겠습니다. 아래 쿼리는 문서에 저장된 모든 형태의 "chris brown" 이름을 조회합니다.
> db.demo314.find({"Name":/chris brown/i});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e50d742f8647eb59e562056"), "Name" : "Chris brown" }
{ "_id" : ObjectId("5e50d744f8647eb59e562058"), "Name" : "CHRIS BROWN" }
{ "_id" : ObjectId("5e50d749f8647eb59e56205a"), "Name" : "chris brown" }결과를 보면 "Chris brown", "CHRIS BROWN", "chris brown"처럼 대소문자가 어떻게 저장되어 있든 모두 정상적으로 조회된 것을 확인할 수 있습니다. 이처럼 MongoDB에서는 정규식의 i 옵션만으로 간단하게 대소문자 무시 검색을 구현할 수 있습니다.