MongoDB-정규식

정규식은 모든 언어에서 자주 사용되어 임의의 문자열에서 패턴이나 단어를 검색합니다. MongoDB는 또한 다음을 사용하여 문자열 패턴 일치를위한 정규식 기능을 제공합니다.$regex운영자. MongoDB는 PCRE (Perl Compatible Regular Expression)를 정규식 언어로 사용합니다.

텍스트 검색과 달리 정규 표현식을 사용하기 위해 구성이나 명령을 수행 할 필요가 없습니다.

다음과 같은 데이터베이스에 문서를 삽입했다고 가정합니다. posts 아래와 같이-

> db.posts.insert(
{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}
WriteResult({ "nInserted" : 1 })

정규식 사용

다음 정규식 쿼리는 문자열이 포함 된 모든 게시물을 검색합니다. tutorialspoint 그것에서-

> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty()
{
	"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
{
	"_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
>

동일한 쿼리를 다음과 같이 작성할 수도 있습니다.

>db.posts.find({post_text:/tutorialspoint/})

대소 문자를 구분하지 않는 정규식 사용

검색 대소 문자를 구분하지 않도록하기 위해 $options 값이있는 매개 변수 $i. 다음 명령은 단어가 포함 된 문자열을 찾습니다.tutorialspoint, 대소 문자에 관계없이 −

>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})

이 쿼리에서 반환 된 결과 중 하나는 단어가 포함 된 다음 문서입니다. tutorialspoint 다른 경우에-

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on TutorialsPoint", 
   "tags" : [ "tutorialspoint" ]
}

배열 요소에 정규식 사용

배열 필드에 정규식의 개념을 사용할 수도 있습니다. 이것은 태그의 기능을 구현할 때 특히 매우 중요합니다. 따라서 tutorial이라는 단어로 시작하는 태그가있는 모든 게시물 (tutorial 또는 tutorials 또는 tutorialpoint 또는 tutorialphp)을 검색하려면 다음 코드를 사용할 수 있습니다.

>db.posts.find({tags:{$regex:"tutorial"}})

정규식 쿼리 최적화

  • 문서 필드가 indexed, 쿼리는 정규식과 일치하는 색인 ​​값을 사용합니다. 따라서 전체 컬렉션을 검색하는 정규식에 비해 검색이 매우 빠릅니다.

  • 정규식이 prefix expression, 모든 일치 항목은 특정 문자열 문자로 시작됩니다. 예를 들어 정규식이 다음과 같은 경우^tut이면 쿼리는 다음으로 시작하는 문자열 만 검색해야합니다. tut.