MongoDB 예제가 포함된 정규식(Regex)
정규식은 기본적으로 문서 내에서 문자열을 찾는 패턴 일치에 사용됩니다.
때로는 컬렉션의 문서를 검색할 때 검색할 정확한 필드 값이 무엇인지 정확히 알지 못할 수도 있습니다. 따라서 정규식을 사용하여 패턴 일치 검색 값을 기반으로 데이터를 검색하는 데 도움을 줄 수 있습니다.
패턴 매칭을 위해 $regex 연산자 사용
The 정규식 연산자 MongoDB 컬렉션에서 특정 문자열을 검색하는 데 사용됩니다. 다음 예는 이것이 어떻게 수행될 수 있는지 보여줍니다.
"Employeeid"와 "EmployeeName"이라는 필드 이름을 가진 동일한 Employee 컬렉션이 있다고 가정해 보겠습니다. 또한 컬렉션에 다음 문서가 있다고 가정해 보겠습니다.
직원 ID | 직원 이름 |
---|---|
22 | 뉴마틴 |
2 | Mohan |
3 | 조 |
4 | 모한R |
100 | Guru99 |
6 | 구랑 |
아래 코드에서는 정규식 연산자를 사용하여 검색 기준을 지정했습니다.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
코드 설명 :
- 여기서 우리는 'Gu' 문자가 포함된 모든 직원 이름을 찾고 싶습니다. 따라서 'Gu'의 검색 기준을 정의하기 위해 $regex 연산자를 지정합니다.
- printjson은 쿼리에 의해 반환된 각 문서를 더 나은 방식으로 인쇄하는 데 사용됩니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
출력에는 직원 이름에 'Gu' 문자가 포함된 문서가 반환되었음을 명확하게 보여줍니다.
컬렉션에 직원 이름이 "Guru999"인 추가 문서가 있는 다음 문서가 있다고 가정해 보겠습니다. 검색 기준을 "Guru99"로 입력하면 "Guru999"가 있는 문서도 반환됩니다. 하지만 이를 원하지 않고 "Guru99"가 있는 문서만 반환하고 싶은 경우를 가정해 보겠습니다. 그러면 정확한 패턴 매칭을 통해 이를 수행할 수 있습니다. 정확한 패턴 매칭을 수행하려면 ^ 및 $ 문자를 사용합니다. 문자열의 시작 부분에 ^ 문자를 추가하고 문자열의 끝에 $를 추가합니다.
직원 ID | 직원 이름 |
---|---|
22 | 뉴마틴 |
2 | Mohan |
3 | 조 |
4 | 모한R |
100 | Guru99 |
6 | 구랑 |
8 | Guru999 |
다음 예는 이것이 어떻게 이루어지는지 보여줍니다.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
코드 설명 :
- 여기 검색 기준에서는 ^ 및 $ 문자를 사용하고 있습니다. ^는 문자열이 특정 문자로 시작하는지 확인하는 데 사용되고, $는 문자열이 특정 문자로 끝나는지 확인하는 데 사용됩니다. 따라서 코드가 실행되면 "Guru99"라는 이름의 문자열만 가져옵니다.
- printjson은 쿼리에 의해 반환된 각 문서를 더 나은 방식으로 인쇄하는 데 사용됩니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
출력에서 "Guru99" 문자열을 가져온 것을 명확하게 볼 수 있습니다.
$options를 사용한 패턴 일치
정규식 연산자를 사용할 때 다음을 사용하여 추가 옵션을 제공할 수도 있습니다. $ 옵션 예어. 예를 들어, 대소문자 구분 여부에 관계없이 직원 이름에 'Gu'가 포함된 모든 문서를 찾고 싶다고 가정해 보겠습니다. 그러한 결과를 원할 경우 다음을 사용해야 합니다. $ 옵션 대소문자를 구분하지 않는 매개변수를 사용합니다.
다음 예는 이것이 어떻게 이루어지는지 보여줍니다.
필드 이름이 "Employeeid" 및 "EmployeeName"인 동일한 Employee 컬렉션이 있다고 가정해 보겠습니다.
또한 우리 컬렉션에 다음과 같은 문서가 있다고 가정해 보겠습니다.
직원 ID | 직원 이름 |
---|---|
22 | 뉴마틴 |
2 | Mohan |
3 | 조 |
4 | 모한R |
100 | Guru99 |
6 | 구랑 |
7 | 구루99 |
이제 마지막 항목과 동일한 쿼리를 실행하면 결과에 "GURU99"가 포함된 문서가 표시되지 않습니다. 이것이 결과 세트에 포함되도록 하려면 $options “I” 매개변수를 추가해야 합니다.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
코드 설명 :
- 'I' 매개변수(대소문자를 구분하지 않음을 의미)가 있는 $options는 'Gu' 문자가 소문자로 나오든 대문자로 나오든 상관없이 검색을 수행하도록 지정합니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
- 출력 결과를 보면 하나의 문서에 대문자 'Gu'가 있더라도 해당 문서가 결과 집합에 계속 표시된다는 것을 분명히 알 수 있습니다.
정규식 연산자 없이 패턴 매칭
정규 표현식 연산자 없이도 패턴 매칭을 할 수 있습니다. 다음 예는 이것이 어떻게 가능한지 보여줍니다.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
코드 설명 :
- "//" 옵션은 기본적으로 이러한 구분 기호 내에서 검색 기준을 지정하는 것을 의미합니다. 따라서 EmployeeName에 'Gu'가 포함된 문서를 다시 찾기 위해 /Gu/를 지정합니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
출력에는 직원 이름에 'Gu' 문자가 포함된 문서가 반환되었음을 명확하게 보여줍니다.
컬렉션에서 마지막 'n'개 문서 가져오기
컬렉션의 마지막 n개 문서를 가져오는 방법에는 여러 가지가 있습니다.
다음 단계를 통해 방법 중 하나를 살펴보겠습니다.
다음 예는 이것이 어떻게 이루어지는지 보여줍니다.
필드 이름이 "Employeeid" 및 "EmployeeName"인 동일한 Employee 컬렉션이 있다고 가정해 보겠습니다.
또한 우리 컬렉션에 다음과 같은 문서가 있다고 가정해 보겠습니다.
직원 ID | 직원 이름 |
---|---|
22 | 뉴마틴 |
2 | Mohan |
3 | 조 |
4 | 모한R |
100 | Guru99 |
6 | 구랑 |
7 | 구루99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
코드 설명 :
1) 문서를 쿼리할 때, sort 함수를 사용하여 컬렉션의 _id 필드 값을 기준으로 레코드를 역순으로 정렬합니다. -1은 기본적으로 문서를 역순 또는 내림차순으로 정렬하여 마지막 문서가 첫 번째로 표시되는 문서가 되도록 합니다.
2) 그런 다음 제한 절을 사용하여 원하는 레코드 수를 표시하십시오. 여기서는 제한 조항(2)을 설정했으므로 마지막 두 문서를 가져옵니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
출력은 컬렉션의 마지막 두 문서가 표시됨을 명확히 보여줍니다. 따라서 컬렉션의 마지막 'n'개 문서를 가져오려면 먼저 문서를 내림차순으로 정렬한 다음 limit 절을 사용하여 필요한 'n'개 문서 수를 반환할 수 있음을 명확히 보여주었습니다.
주의 사항: 38,000자를 초과하는 문자열에 대해 검색을 수행하면 올바른 결과가 표시되지 않습니다.
요약
- 패턴 매칭은 $regex 연산자로 달성할 수 있습니다. 이 연산자는 컬렉션에서 특정 문자열을 찾는 데 사용할 수 있습니다.
- ^ 및 $ 기호는 정확한 텍스트 검색에 사용할 수 있습니다. ^는 문자열이 특정 문자로 시작하는지 확인하는 데 사용되고 $는 문자열이 특정 문자로 끝나는지 확인하는 데 사용됩니다.
- 'i'와 $regex 연산자를 함께 사용하면 대소문자를 구분하지 않도록 지정하여 문자열이 소문자든 대문자든 검색할 수 있습니다.
- 구분 기호 //는 패턴 일치에도 사용할 수 있습니다.
- 컬렉션의 마지막 n개 문서를 반환하려면 정렬과 제한 함수의 조합을 사용하세요. 정렬 기능을 사용하면 문서를 내림차순으로 반환할 수 있으며, 그런 다음 제한 절을 사용하여 반환되는 문서 수를 제한할 수 있습니다.