MongoDB 정규식
정규식은 단일 문자열을 사용하여 특정 구문 규칙을 따르는 일련의 문자열을 설명하고 일치시킵니다.
많은 프로그래밍 언어가 정규식을 사용한 문자열 연산을 지원합니다.
MongoDB는 $regex 연산자를 사용하여 문자열과 일치하는 정규식을 설정합니다.
MongoDB는 정규식 언어로 PCRE(Perl Compatible Regular Expression)를 사용합니다.
전체 텍스트 검색과 달리 정규식을 사용할 때는 별도의 구성이 필요하지 않습니다.
게시물 콘텐츠와 태그가 포함된 posts 컬렉션에 대해 다음 문서 구조를 고려하세요.
{ "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] }
@
아래 정규식
사용 이 명령은 정규식을 사용하여 w3cschool.cc 문자열이 포함된 기사를 찾습니다:
>db.posts.find({post_text:{$regex:"w3cschool.cc"}})
위의 쿼리는 다음과 같이 작성할 수도 있습니다:
>db.posts.find({post_text:/w3cschool.cc/})
대소문자를 구분하지 않는 정규식
검색에서 대소문자를 구분해야 하는 경우 $options를 $i로 설정할 수 있습니다.
다음 명령은 대소문자를 구분하지 않는 문자열 w3cschool.cc를 찾습니다.
>db.posts.find({post_text:{$regex:"w3cschool.cc",$options:"$i"}})
컬렉션은 w3cschool.cc 문자열을 포함하는 모든 데이터를 반환하며 대소문자를 구분하지 않습니다.
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on W3Cschool.cc", "tags" : [ "tutorialspoint" ] }
정규식을 사용하는 배열 요소
배열 필드에서 정규식을 사용하여 콘텐츠를 찾을 수도 있습니다. 이는 튜토리얼(tutorial 또는 tutorials 또는 tutorialpoint 또는 tutorialphp)로 시작하는 태그 데이터를 찾아야 하는 경우 태그 구현에 매우 유용합니다. 다음 코드를 사용할 수 있습니다.
>db.posts.find({tags:{$regex:"tutorial"}})
Optimize 정규식 쿼리
문서의 필드가 색인화되어 있는 경우 색인을 사용하는 것이 일반보다 낫습니다. 표현식 표현식 일치는 더 빠른 쿼리를 위해 모든 데이터를 검색합니다.
@정규 표현식이 접두사 표현식인 경우 일치하는 모든 데이터는 지정된 접두사 문자열로 시작됩니다. 예를 들어: 정규식이 ^tut 인 경우 쿼리 문은 tut로 시작하는 문자열을 찾습니다.
정규식을 사용할 때 주의해야 할 두 가지 사항이 있습니다.
변수는 정규식에서 사용됩니다. 결합된 문자열을 변환하려면 eval을 사용해야 합니다. 문자열을 직접 연결하여 표현식에 전달할 수는 없습니다. 그렇지 않으면 오류 메시지가 보고되지 않지만 결과는 비어 있습니다! 예는 다음과 같습니다.
var name=eval("/" + 变量值key +"/i");
다음은 제목 키워드를 포함하고 대소문자를 구분하지 않는 퍼지 쿼리입니다.
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}