MongoDB에서 find() 메서드와 정규표현식(Regex)을 활용하면 필드 값 안에 포함된 특정 문자열을 손쉽게 검색할 수 있습니다. 이번 글에서는 '@email'처럼 특정 문자열이 포함된 문서를 찾는 방법을 실제 예제와 함께 단계별로 살펴보겠습니다.
1. 샘플 데이터 생성하기
먼저 insertOne() 메서드를 사용해 문서가 담긴 컬렉션을 생성합니다.
> db.demo727.insertOne({UserId:"John@email.com"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab375f43417811278f5898")
}
> db.demo727.insertOne({UserId:"John@yahoo.com"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab376043417811278f5899")
}
> db.demo727.insertOne({UserId:"Chris@EMAIL.com"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab376143417811278f589a")
}2. 전체 문서 확인하기
find() 메서드를 호출하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo727.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5eab375f43417811278f5898"), "UserId" : "John@email.com" }
{ "_id" : ObjectId("5eab376043417811278f5899"), "UserId" : "John@yahoo.com" }
{ "_id" : ObjectId("5eab376143417811278f589a"), "UserId" : "Chris@EMAIL.com" }3. '@email' 문자열 검색 쿼리
'@email'과 같은 문자열이 포함된 문서를 검색하려면 정규표현식을 조건으로 지정하면 됩니다.
> db.demo727.find({"UserId":/@email/i});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5eab375f43417811278f5898"), "UserId" : "John@email.com" }
{ "_id" : ObjectId("5eab376143417811278f589a"), "UserId" : "Chris@EMAIL.com" }정규표현식 옵션 설명
쿼리에 사용된 /@email/i 패턴에서 마지막의 i 플래그는 대소문자를 구분하지 않고(ignore case) 검색하겠다는 의미입니다. 따라서 소문자로 된 'John@email.com'뿐만 아니라 대문자가 포함된 'Chris@EMAIL.com'도 함께 조회된 것을 확인할 수 있습니다. 만약 대소문자를 엄격하게 구분하고 싶다면 i 플래그를 제거한 /@email/ 패턴으로 검색하면 됩니다.