Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 정규 표현식(RegExp)으로 문자열 검색하고 이스케이프 처리하는 방법

MongoDB에서 정규 표현식으로 문자열 검색하기

MongoDB에서 저장된 문자열 데이터를 대소문자 구분 없이 검색하려면 find() 메서드와 함께 정규 표현식의 //i 옵션을 사용하면 됩니다. 이 글에서는 실제 예제를 통해 정규 표현식을 활용해 문서를 검색하는 방법을 단계별로 살펴보겠습니다.

1. 컬렉션 생성 및 문서 삽입

먼저 demo696이라는 컬렉션을 생성하고 여러 개의 문서를 삽입해 보겠습니다.

> db.demo696.insertOne({Message:"/Good/"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d664551299a9f98c9391")
}
> db.demo696.insertOne({Message:"(good)"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d67a551299a9f98c9392")
}
> db.demo696.insertOne({Message:"/Bye/"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d68b551299a9f98c9393")
}
> db.demo696.insertOne({Message:"(GOOD)"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d693551299a9f98c9394")
}

2. 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo696.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5ea6d664551299a9f98c9391"), "Message" : "/Good/" }
{ "_id" : ObjectId("5ea6d67a551299a9f98c9392"), "Message" : "(good)" }
{ "_id" : ObjectId("5ea6d68b551299a9f98c9393"), "Message" : "/Bye/" }
{ "_id" : ObjectId("5ea6d693551299a9f98c9394"), "Message" : "(GOOD)" }

3. 정규 표현식으로 패턴 검색하기

이제 /good/i 정규 표현식을 적용하여 Message 필드에 "good"이라는 문자열이 포함된 문서를 대소문자 구분 없이 검색해 보겠습니다.

> db.demo696.find({Message:/good/i});

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5ea6d664551299a9f98c9391"), "Message" : "/Good/" }
{ "_id" : ObjectId("5ea6d67a551299a9f98c9392"), "Message" : "(good)" }
{ "_id" : ObjectId("5ea6d693551299a9f98c9394"), "Message" : "(GOOD)" }

결과를 보면 "/Good/", "(good)", "(GOOD)"처럼 대소문자와 관계없이 "good"이 포함된 모든 문서가 반환된 것을 확인할 수 있습니다. 반면 "/Bye/"는 해당 패턴과 일치하지 않기 때문에 검색 결과에서 제외됩니다.

핵심 정리

MongoDB에서 정규 표현식 검색을 수행할 때는 슬래시(/) 사이에 찾고자 하는 패턴을 작성하고, 뒤에 i 플래그를 붙이면 대소문자를 구분하지 않는 유연한 검색이 가능합니다. 이 방식은 부분 문자열 매칭에도 유용하게 활용할 수 있어, 로그 분석이나 키워드 기반 조회 등 다양한 상황에서 유용하게 사용됩니다.