MongoDB에서 텍스트 검색과 정규식 활용하기
MongoDB에서 정규식(Regular Expression)을 사용해 레코드를 필터링하려면 $regex 연산자를 활용하면 됩니다. 이번 글에서는 샘플 컬렉션 생성부터 정규식 기반 텍스트 검색까지 단계별로 예제와 함께 살펴보겠습니다.
1. 샘플 컬렉션 및 문서 생성
먼저 insertOne() 메서드를 사용해 데모 컬렉션(demo19)에 문서를 추가합니다.
> db.demo19.insertOne({"Values":"4321GH"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1389b955d0fc6657d21f0f")
}
> db.demo19.insertOne({"Values":"12321_Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1389c755d0fc6657d21f10")
}
> db.demo19.insertOne({"Values":"8765Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1389d355d0fc6657d21f11")
}2. find() 메서드로 전체 문서 조회
find() 메서드를 호출하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo19.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e1389b955d0fc6657d21f0f"), "Values" : "4321GH" }
{ "_id" : ObjectId("5e1389c755d0fc6657d21f10"), "Values" : "12321_Carol" }
{ "_id" : ObjectId("5e1389d355d0fc6657d21f11"), "Values" : "8765Mike" }3. 정규식과 텍스트 검색 함께 사용하기
이제 $regex 연산자를 적용해 특정 패턴과 일치하는 문서만 필터링해 보겠습니다. 아래 쿼리는 Values 필드에 "4321" 또는 "8765"라는 문자열이 포함된 문서를 검색합니다.
> db.demo19.find({Values: {$regex: /4321|8765/, $options: 'i'}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e1389b955d0fc6657d21f0f"), "Values" : "4321GH" }
{ "_id" : ObjectId("5e1389d355d0fc6657d21f11"), "Values" : "8765Mike" }결과를 보면 "12321_Carol" 문서는 두 패턴 어느 것에도 해당하지 않기 때문에 제외된 것을 확인할 수 있습니다.
$options 'i' 옵션이란?
$options 값으로 'i'를 지정하면 대소문자를 구분하지 않는(case-insensitive) 검색이 수행됩니다. 즉, 패턴 매칭 시 영문 대문자와 소문자를 동일하게 취급하므로, 알파벳이 포함된 데이터를 검색할 때 유용합니다.