Expressões regulares são usadas para correspondência de padrões, que é basicamente para cadeias de caracteres de descobertas em documentos.
Às vezes, ao recuperar documentos em uma coleção, você pode não saber exatamente o valor exato do campo a ser pesquisado. Portanto, pode-se usar expressões regulares para auxiliar na recuperação de dados com base em valores de pesquisa de correspondência de padrões.
Neste tutorial, você aprenderá -
- Usando o operador $ regex para correspondência de padrões
- Correspondência de padrões com $ options
- Correspondência de padrões sem o operador regex
- Buscando os últimos 'n' documentos de uma coleção
Usando o operador $ regex para correspondência de padrões
O operador regex no MongoDB é usado para pesquisar strings específicas na coleção. O exemplo a seguir mostra como isso pode ser feito.
Vamos supor que temos nossa mesma coleção Employee com os nomes de campo "Employeeid" e "EmployeeName". Vamos supor também que temos os seguintes documentos em nossa coleção.
ID do Empregado | nome do empregado |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Aqui no código a seguir, usamos o operador regex para especificar os critérios de pesquisa.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Explicação do código:
- Aqui, queremos encontrar todos os nomes de funcionários que contenham os caracteres 'Gu'. Portanto, especificamos o operador $ regex para definir os critérios de pesquisa de 'Gu'
- O printjson está sendo usado para imprimir cada documento que é retornado pela consulta de uma maneira melhor.
Se o comando for executado com sucesso, a seguinte saída será mostrada:
Resultado:
A saída mostra claramente que os documentos em que o Nome do funcionário contém os caracteres 'Gu' são retornados.
Suponha que sua coleção tenha os seguintes documentos com um documento adicional que contenha o nome do funcionário como "Guru999". Se você inseriu os critérios de pesquisa como "Guru99", também retornaria o documento que tinha "Guru999". Mas suponha que não quiséssemos isso e apenas quiséssemos devolver o documento com "Guru99". Então, podemos fazer isso com correspondência de padrão exata. Para fazer uma correspondência de padrão exata, usaremos os caracteres e $. Vamos adicionar o caractere no início da string e $ no final da string.
ID do Empregado | nome do empregado |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru999 |
O exemplo a seguir mostra como isso pode ser feito.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Explicação do código:
- Aqui, nos critérios de pesquisa, estamos usando os caracteres e $. O é usado para garantir que a string comece com um determinado caractere e $ é usado para garantir que a string termine com um determinado caractere. Portanto, quando o código for executado, ele buscará apenas a string com o nome "Guru99".
- O printjson está sendo usado para imprimir cada documento que é retornado pela consulta de uma maneira melhor.
Se o comando for executado com sucesso, a seguinte saída será mostrada:
Resultado:
Na saída, é claramente visível que a string "Guru99" foi buscada.
Correspondência de padrões com $ options
Ao usar o operador regex, também é possível fornecer opções adicionais usando a palavra-chave $ options . Por exemplo, suponha que você queira localizar todos os documentos que têm 'Gu' no nome do funcionário, independentemente de diferenciar maiúsculas de minúsculas ou não. Se esse resultado for desejado, precisamos usar as opções $ com parâmetro de insensibilidade a maiúsculas e minúsculas.
O exemplo a seguir mostra como isso pode ser feito.
Vamos supor que temos nossa mesma coleção Employee com os nomes de campo "Employeeid" e "EmployeeName".
Vamos supor também que temos os seguintes documentos em nossa coleção.
ID do Empregado | nome do empregado |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Agora, se executarmos a mesma consulta do último tópico, nunca veremos o documento com "GURU99" no resultado. Para garantir que isso venha no conjunto de resultados, precisamos adicionar o parâmetro $ options "I".
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Explicação do código:
- As $ options com o parâmetro 'I' (que significa insensibilidade a maiúsculas e minúsculas) especifica que queremos realizar a pesquisa independentemente de encontrarmos as letras 'Gu' em maiúsculas ou minúsculas.
Se o comando for executado com sucesso, a seguinte saída será mostrada:
Resultado:
- A saída mostra claramente que, embora um documento tenha a caixa alta 'Gu', o documento ainda é exibido no conjunto de resultados.
Correspondência de padrões sem o operador regex
Também é possível fazer correspondência de padrões sem o operador regex. O exemplo a seguir mostra como isso pode ser feito.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Explicação do código:
- As opções "//" basicamente significam especificar seus critérios de pesquisa dentro desses delimitadores. Portanto, estamos especificando / Gu / para localizar novamente os documentos que têm 'Gu' em seu EmployeeName.
Se o comando for executado com sucesso, a seguinte saída será mostrada:
Resultado:
A saída mostra claramente que os documentos em que o Nome do funcionário contém os caracteres 'Gu' são retornados.
Buscando os últimos 'n' documentos de uma coleção
Existem várias maneiras de obter os últimos n documentos em uma coleção.
Vejamos uma das maneiras pelas etapas a seguir
O exemplo a seguir mostra como isso pode ser feito.
Vamos supor que temos nossa mesma coleção Employee com os nomes de campo "Employeeid" e "EmployeeName".
Vamos supor também que temos os seguintes documentos em nossa coleção:
ID do Empregado | nome do empregado |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Explicação do código:
1) Ao consultar os documentos, use a função de classificação para classificar os registros na ordem reversa com base no valor do campo _id na coleção. O -1 indica basicamente para classificar os documentos em ordem inversa ou decrescente para que o último documento se torne o primeiro documento a ser exibido.
2) Em seguida, use a cláusula limit para exibir apenas o número de registros que deseja. Aqui nós definimos a cláusula limit (2), então ela irá buscar os dois últimos documentos.
Se o comando for executado com sucesso, a seguinte saída será mostrada:
Resultado:
A saída mostra claramente que os dois últimos documentos da coleção são exibidos. Portanto, mostramos claramente que, para buscar os últimos 'n' documentos da coleção, podemos primeiro classificar os documentos em ordem decrescente e, em seguida, usar a cláusula limite para retornar o número 'n' de documentos necessários.
Nota : Se a pesquisa for realizada em uma string com mais de, digamos, 38.000 caracteres, ela não exibirá os resultados corretos.
Resumo:
- A correspondência de padrões pode ser obtida pelo operador $ regex. Este operador pode ser usado para localizar certas strings na coleção.
- Os símbolos e $ podem ser usados para pesquisas de texto exatas com sendo usado para garantir que a string comece com um certo caractere e $ usado para garantir que a string termine com um certo caractere.
- O 'i' junto com o operador $ regex pode ser usado para especificar a não diferenciação de maiúsculas e minúsculas para que as strings possam ser pesquisadas, estejam em minúsculas ou maiúsculas.
- Os delimitadores // também podem ser usados para correspondência de padrões.
- Use uma combinação de classificação e função de limite para retornar os últimos n documentos na coleção. A função de classificação pode ser usada para retornar os documentos em ordem decrescente, após a qual a cláusula de limite pode ser usada para limitar o número de documentos que estão sendo retornados.