MongoDB/MongoDB 기본 CRUD

[MongoDB 기본 CRUD] 8. 유용한 추가문법(1) - $ regex와 find() 명령어 사용하여 조건 조회하기

Fletcher 2024. 8. 13. 11:54

 

반갑습니다!

저번 포스트까지 find() 함수의 유용한 문법으로

비교 조건, 논리연산 조건에 대해서 살펴보았습니다

 

이번에는 조금 더 확장해서

$regex 키워드를 사용하여 정규 표현식을 이용한 검색,

sort를 사용하여 정렬 검색,

count를 통해 문서 개수 카운팅하기에 대한

내용들을 알아보도록 하겠습니다 ^^

 

 

 

 

1. 정규 표현식을 이용한 검색 : $regex

정규표현식(Regular Expression)은 문자열에서

특정 패턴을 찾거나 조작하기 위해 사용되는데요 ^^

주로 텍스트 데이터의 검색, 매칭, 분리, 치환 등의 작업에 활용됩니다!

 

정규표현식은 메타문자(Metacharacter)와 리터럴(Literal)로 구성됩니다

메타문자는 특정 의미를 가지는 문자로, 패턴을 정의하는 데 사용됩니다 ^^!

예를 들자면 .은 임의의 한 문자를 의미하고, *는 앞의 요소가 0번 이상 반복됨을 의미합니다

 

 

 

 

주요 용어 및 기호는 다음과 같습니다

 

 

①리터럴(Literal)

문자 자체를 의미합니다

예를 들어 정규표현식 abc는 문자열 "abc"를 찾습니다.

 

②메타문자(Metacharacter)

특별한 의미를 가지는 문자들로서 패턴 매칭에 대한 의미를 갖습니다

. : 임의의 한 문자

^ : 문자열의 시작

$ : 문자열의 끝

* : 0번 이상 반복

+ : 1번 이상 반복

? : 0번 또는 1번 존재

[ ] : 괄호 안의 문자 중 하나와 매칭

| : 둘 중 하나의 패턴과 매칭

( ) : 그룹(Group)으로 묶을 때 사용

\ : 이스케이프 문자로서 메타문자를 문자 그대로 사용할 때 이용됨

 

③그리디(Greedy)와 논-그리디(Non-Greedy) 매칭

기본적으로 정규표현식은 가능한 한 많이 매칭하려는 성질을 가지는데 이를 Greedy라고 합니다

*?, +?와 같은 표현은 논-그리디(최소 매칭)를 수행합니다.

 

④문자 클래스(Character Class)

특정 집합의 문자와 매칭하기 위한 패턴입니다

예를 들어 [a-z]는 소문자 알파벳과 매칭됩니다.

 

⑤캡처 그룹(Capture Group)

괄호 ()를 이용해 그룹을 만듭니다

예를 들어 (ab)는 "ab"를 찾고 이를 재사용할 수 있습니다.

 

⑥역참조(Backreference)

캡처된 그룹을 참조합니다

예를 들어 \1은 첫 번째 그룹을 재참조합니다.

 

⑦앵커(Anchor)

매칭이 일어날 위치를 지정합니다

예를 들어 ^는 문자열의 시작을, $는 문자열의 끝을 의미합니다.

 

 

 

 

 

 

예시 코드를 보겠습니다

 

예시 1)

 

MongoDB: db.users.find( { name: /Fletcher/ } )

MongoDB: db.users.find( { name: { $regex: /Fletcher/ } } )

 

위 두 코드는 동일한 의미를 갖습니다 ^^

name 필드의 값에 "Fletcher"라는 문자열이 포함되어 있으면

조건조회 결과로 출력하는 조건입니다 

 

 

 

 

예시 2)

 

 

 

MongoDB: db.users.find( { name: /^Da/ } )

MongoDB: db.users.find( { name: { $regex: /^Da/ } } )

 

마찬가지로 위 두 코드는 동일한 의미를 갖습니다 ^^

name 필드의 값으로 "Da"라는 문자열이 포함되어 있으면

조건조회 결과로 출력하는 조건인데요

 

앞의 조건과의 차이점을 보면 ^라는 기호가 들어가있죠?

정규표현식 메타문자의 내용을 살펴본 바를 적용해보면,

"Da"라는 문자열이 포함되어있되 해당 문자열로 시작하는 조건을 의미합니다 ^^