English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Expressões Regulares MongoDB

As expressões regulares são frequentemente usadas em todos os idiomas para procurar padrões ou palavras em qualquer string. O MongoDB também usa o operador $regex para fornecer funcionalidades de correspondência de padrão de string com expressões regulares. O MongoDB usa PCRE (Perl Compatible Regular Expressions) como linguagem de expressão regular.

Diferente da pesquisa de texto, não precisamos de configuração ou comando adicional para usar expressões regulares.

supondo que já estejamos no banco de dados chamado posts um documento foi inserido no banco de dados, conforme abaixo

>db.posts.insert(
{
   "post_text": "aprecie os artigos mongodb no w3codebox",
   "tags": [
      "mongodb",
      "w3codebox"
   ]
}
WriteResult({ "nInserted": 1 })

usando expressão regular

a consulta regex busca strings que contêm a string w3todos os posts do codebox–

>db.posts.find({post_text:{$regex:"w3codebox"}).pretty(){
	"_id": ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text": "aprecie os artigos mongodb no w3codebox",
	"tags": [
		"mongodb",
		"w3codebox"
	]
}
{
	"_id": ObjectId("5dd7d111f1dd4583e7103fe2")
	"post_text": "aprecie os artigos mongodb no w3codebox",
	"tags": [
		"mongodb",
		"w3codebox"
	]
}
>

A mesma consulta pode ser escrita-

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

Expressões regulares insensíveis a maiúsculas e minúsculas

Para que a pesquisa não distinga maiúsculas e minúsculas, usamos$optionsparâmetro com valor$iA seguinte instrução buscará strings com a palavraw3codeboxsem considerar maiúsculas e minúsculas-

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

um dos resultados da consulta é o seguinte documento, que contémw3codeboxpalavras em diferentes contextos-

{
   "_id": ObjectId("53493d37d852429c10000004")
   "post_text": "olá! este é meu post no w3codebox", 
   "tags" : [ "w3codebox" ]
}

Uso de Expressão Regular em Elementos de Array

Também podemos usar o conceito de expressão regular em campos de array. Quando implementamos a função de tag, isso é especialmente importante. Portanto, se você quiser buscar todas as palavras com tags que começam com a palavra tutorial (tutorial ou tutorialpoint ou tutorialphp), você pode usar o seguinte código-

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

Otimização de Consultas de Expressão Regular

  • Se o campo do documento forindexadoA consulta usará o valor do índice para coincidir com a expressão regular. Em comparação com a varredura de expressão regular em todo o conjunto, isso torna a pesquisa muito rápida.

  • Se a expressão regular regex forexpressão de prefixoEntão, todos os itens correspondentes começarão com algum caractere de string. Por exemplo, se a expressão regular regex for^tutEntão, a consulta deve buscar apenas aqueles strings que começam comtut.