MongoDB에서 $regex 연산자와 정규식을 활용하면 특정 패턴을 가진 문자열 데이터를 손쉽게 조회할 수 있습니다. 이번 글에서는 StudentFullName 필드 값 중 대문자 5글자가 연속으로 포함된, 즉 처음 5글자가 모두 대문자인 레코드를 찾아 표시하는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입합니다.
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"JOHN Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7edef1a844af18acdffb2")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"SAM Williams"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee011a844af18acdffb3")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"CAROL Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee101a844af18acdffb4")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"Bob Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee351a844af18acdffb5")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"DAVID Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee451a844af18acdffb6")
}
총 5개의 학생 이름을 삽입했습니다. 이 중 CAROL Taylor와 DAVID Miller는 이름 부분이 5글자 모두 대문자로 작성되어 있으며, 나머지 문서는 해당되지 않습니다.
2. 저장된 전체 문서 확인하기
find() 메서드에 pretty() 메서드를 함께 사용하면 컬렉션의 모든 문서를 읽기 좋은 형태로 출력할 수 있습니다.
> db.upperCaseFiveLetterDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cd7edef1a844af18acdffb2"),
"StudentFullName" : "JOHN Smith"
}
{
"_id" : ObjectId("5cd7ee011a844af18acdffb3"),
"StudentFullName" : "SAM Williams"
}
{
"_id" : ObjectId("5cd7ee101a844af18acdffb4"),
"StudentFullName" : "CAROL Taylor"
}
{
"_id" : ObjectId("5cd7ee351a844af18acdffb5"),
"StudentFullName" : "Bob Taylor"
}
{
"_id" : ObjectId("5cd7ee451a844af18acdffb6"),
"StudentFullName" : "DAVID Miller"
}
3. 조건에 맞는 레코드 개수 구하기
정규식 /[A-Z]{5}/는 '영문 대문자 5개가 연속으로 이어진 부분'을 의미합니다. 이 패턴을 $regex 연산자에 적용한 뒤 count() 메서드를 호출하면 조건을 만족하는 레코드 수를 확인할 수 있습니다.
> db.upperCaseFiveLetterDemo.find({StudentFullName : {$regex : /[A-Z]{5}/ } }).count();
실행 결과:
2
조건을 만족하는 문서는 총 2건입니다. CAROL과 DAVID처럼 5글자가 모두 대문자인 이름을 가진 문서가 두 개 있는 것이죠.
4. 조건에 맞는 레코드 표시하기
이제 해당 문서를 실제로 조회해 보겠습니다.
> db.upperCaseFiveLetterDemo.find({StudentFullName : {$regex : /[A-Z]{5}/ } });
실행 결과:
{ "_id" : ObjectId("5cd7ee101a844af18acdffb4"), "StudentFullName" : "CAROL Taylor" }
{ "_id" : ObjectId("5cd7ee451a844af18acdffb6"), "StudentFullName" : "DAVID Miller" }
정규식 패턴 해설
- [A-Z] : 영문 대문자 A부터 Z까지의 한 글자를 나타냅니다.
- {5} : 바로 앞의 패턴이 정확히 5번 연속 반복되어야 함을 의미합니다.
- 따라서 [A-Z]{5}는 '대문자 5개가 연속된 문자열 조각'을 찾는 패턴입니다.
이처럼 MongoDB의 $regex 연산자를 사용하면 대소문자 규칙과 같은 복잡한 문자열 조건도 간단한 쿼리 하나로 처리할 수 있습니다.