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

MongoDB에서 정규 표현식($regex)으로 텍스트 검색하는 방법

MongoDB에서 정규 표현식(Regular Expression)을 활용해 텍스트를 검색하려면 $regex 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 컬렉션 생성부터 패턴 매칭 검색까지 단계별로 살펴보겠습니다.

1. 예제 컬렉션 생성하기

먼저 문서를 포함하는 컬렉션을 생성합니다. 아래 예제에서는 쉼표로 구분된 숫자 문자열을 값으로 가지는 문서들을 삽입합니다.

> db.demo519.insertOne({"Value":"50,60,70"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e88b9c0b3fbf26334ef6111")
}
> db.demo519.insertOne({"Value":"80,90,50"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e88b9c7b3fbf26334ef6112")
}
> db.demo519.insertOne({"Value":"10,30,40"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e88b9cfb3fbf26334ef6113")
}

2. 저장된 전체 문서 확인하기

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

> db.demo519.find();

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

{ "_id" : ObjectId("5e88b9c0b3fbf26334ef6111"), "Value" : "50,60,70" }
{ "_id" : ObjectId("5e88b9c7b3fbf26334ef6112"), "Value" : "80,90,50" }
{ "_id" : ObjectId("5e88b9cfb3fbf26334ef6113"), "Value" : "10,30,40" }

3. $regex 연산자로 텍스트 검색 실행하기

이제 정규 표현식을 사용해 특정 문자열이 포함된 문서를 검색해 보겠습니다. 아래 쿼리는 Value 필드에 "50"이라는 문자열이 포함된 첫 번째 문서를 찾습니다.

> db.demo519.findOne({ Value: { $regex: /50/ } });

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

{ "_id" : ObjectId("5e88b9c0b3fbf26334ef6111"), "Value" : "50,60,70" }

마무리 및 참고 사항

위 예제처럼 $regex 연산자와 슬래시(/)로 감싼 정규 표현식 패턴을 조합하면, 필드 값 내에 특정 문자열이 포함되어 있는지 손쉽게 확인할 수 있습니다. 몇 가지 추가로 알아두면 유용한 사항은 다음과 같습니다.

- findOne() vs find(): findOne()은 일치하는 첫 번째 문서 하나만 반환하고, find()는 일치하는 모든 문서를 반환합니다.
- 대소문자 무시 옵션: /pattern/i 처럼 i 플래그를 붙이면 대소문자를 구분하지 않고 검색할 수 있습니다.
- 성능 고려사항: 정규 표현식 검색은 인덱스를 효율적으로 활용하지 못할 수 있으므로, 대량의 데이터에서는 가능한 한 접두어(anchor)가 있는 패턴(예: /^50/)을 사용하는 것이 좋습니다.