[MongoDB 기본 CRUD] 8. 유용한 추가문법(1) - $ regex와 find() 명령어 사용하여 조건 조회하기
반갑습니다!
저번 포스트까지 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"라는 문자열이 포함되어있되 해당 문자열로 시작하는 조건을 의미합니다 ^^