Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / / /

regex

Nesta página

  • Definição
  • Sintaxe
  • Opções
  • Comportamento
  • Comportamento da Expressão Regular Lucene
  • Exemplos
regex

regex interpreta o campo query como uma expressão regular. regex é um operador de nível de termo, o que significa que o campo query não é analisado.

Dica

Veja também:

  • Analisadores.

  • Exemplo de campo analisado.

Observação

A linguagem de expressão regular disponível para o operador regex é um subconjunto limitado da biblioteca PCRE.

Para obter informações detalhadas, consulte o Class RegExp documentação.

regex tem a seguinte sintaxe:

1{
2 $search: {
3 "index": <index name>, // optional, defaults to "default"
4 "regex": {
5 "query": "<search-string>",
6 "path": "<field-to-search>",
7 "allowAnalyzedField": <boolean>,
8 "score": <options>
9 }
10 }
11}

regex usa os seguintes termos para construir uma consulta:

Campo
Tipo
Descrição
necessidade
Default
query
cadeia de caracteres ou matriz de cadeias de caracteres
String ou strings para pesquisar.
sim
path
cadeia de caracteres ou matriz de cadeias de caracteres
Campo ou campos indexados a serem pesquisados. Você também pode especificar um caminho curinga para pesquisar. Consulte construção de caminho para ter mais informações.
sim
allowAnalyzedField
booleano
Deve ser definido para true se a query for executada em um campo analisado.
no
false
score
objeto

Pontuação a ser atribuída aos resultados correspondentes dos termos de pesquisa. As opções são:

  • boost: multiplique a pontuação do resultado pelo número fornecido.

  • constant: substitui a pontuação do resultado pelo número fornecido.

  • function: substitua a pontuação do resultado pela expressão fornecida.

no

regex é um operador de nível de termo, o que significa que o campo query não é analisado. As pesquisas com expressões regulares funcionam bem com o analisador de palavras-chave, pois ele indexa os campos uma palavra de cada vez. Para fazer uma pesquisa com distinção entre maiúsculas e minúsculas, não use o analisador padrão, o analisador standard, porque o analisador standard reduz todas as letras minúsculas dos termos. Em vez disso, especifique um analisador diferente.

É possível utilizar o operador regex para executar pesquisas em um campo analisado definindo a opção allowAnalyzedField para true, mas você pode obter resultados inesperados.

Exemplo

A pesquisa de *Star Trek* em um campo indexado com o analisador keyword encontra todos os documentos nos quais o campo contém a string Star Trek em qualquer contexto. A pesquisa de *Star Trek* em um campo indexado com o analisador padrão não encontra nada, pois há um espaço entre Star e Trek, e o índice não contém espaços.

O operador Atlas Search regex utiliza o mecanismo de expressão regular Lucene, que difere de Expressões regulares compatíveis com Perl.

Os seguintes caracteres são reservados como operadores quando usados em expressões comuns:

. ? + * | { } [ ] ( ) < > " \ @ #

Para usar qualquer um dos caracteres acima literalmente em uma expressão correspondente, inicie com um caractere \.

Exemplo

who\? corresponde a "quem?"

Ao usar o caractere de escape em mongosh ou com um driver, é necessário usar uma barra invertida dupla antes do caractere a ser escapado.

Exemplo

Para criar uma expressão curinga que procure qualquer string que contenha um asterisco literal em um aggregation pipeline, use a seguinte expressão:

"*\\**"

O primeiro e o último asteriscos funcionam como curingas que correspondem a qualquer caractere, e o \\* corresponde a um asterisco literal.

Observação

Use a seguinte expressão para escapar de uma barra invertida literal:

"*\\\*"
Operador
Descrição
Exemplo
.
Corresponde a qualquer caractere.
x.z matches "xyz", "xaz", etc.
?
O caractere anterior é opcional e corresponde se não ocorrer mais de uma vez.
xyz? corresponde a "xy" e "xyz"
+
O caractere anterior corresponde se ocorrer uma ou mais vezes.
xy+ corresponde a "xy", "xyy", "xyyy", etc.
*
O caractere anterior corresponde se ocorrer qualquer número de vezes.
xyz* corresponde a "xy", "xyz", "xyzz" etc.
|
O operador OR . A expressão corresponderá se o mais longo dos dois padrões em cada lado do operador | for correspondente.
abc|xyz corresponde a "abc" ou "xyz"
{<number>}
O caractere anterior corresponde se ocorrer exatamente <number> vezes.
xyz{3} corresponde a "xyzzz"
()
Caracteres dentro dos parênteses são tratados como uma unidade única para fins de correspondência.
xyz(abc)[2] corresponde "xyzabcabc"
[]

Corresponde a qualquer caractere dentro dos colchetes.

Adicionar um ^ ao início corresponde a qualquer caractere, exceto aqueles dentro dos colchetes.

Dentro dos colchetes, - indica um intervalo, a menos que - seja o primeiro caractere ou fuja com um \.

[xyz] matches "x", "y", and "z"
[^abc] matches any character except "a", "b", or "c"
[a-d] matches "a", "b", "c", or "d"
[0-9] matches any numeric character from 0 through 9
<>
Corresponder uma faixa numérica.
<1-3> corresponde a "1", "2" e "3"
#
O operador de idioma vazio. O operador # não corresponde a nenhuma string, incluindo uma string vazia.
#|xyz corresponde a "xyz" e nada mais

regex não suporta os operadores âncora ^ e $.

Os exemplos a seguir usam a collection movies no banco de dados sample_mflix com uma definição de índice personalizada que usa o analisador de palavras-chave. Se você tiver o sample dataset em seu cluster, poderá criar um Atlas Search index na movies e executar as querys de exemplo em seu cluster.

Dica

Se você já carregou o conjunto de dados de amostra, siga o tutorial Iniciar com Atlas Search para criar uma definição de índice e executar queries de Atlas Search.

A seguinte definição de índice indexa o campo title na coleção movies com o analisador de palavra-chave:

1{
2 "mappings": {
3 "fields": {
4 "title": {
5 "analyzer": "lucene.keyword",
6 "type": "string"
7 }
8 }
9 }
10}

O exemplo a seguir pesquisa todos os campos title para títulos de filmes que terminam com a palavra Seattle. A expressão comum (.*) corresponde a qualquer número de caracteres.

1db.movies.aggregate([
2 {
3 "$search": {
4 "regex": {
5 "path": "title",
6 "query": "(.*) Seattle"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1
14 }
15 }
16])

A query acima retorna os seguintes resultados:

{ "title" : "Sleepless in Seattle" }
{ "title" : "Battle in Seattle" }

O exemplo a seguir usa a expressão regular [0-9]{2} (.){4}s para encontrar títulos de filmes que começam com um número de 2 dígitos seguido por um espaço e terminam com uma palavra de 5 letras terminando em s.

1db.movies.aggregate([
2 {
3 "$search": {
4 "regex": {
5 "path": "title",
6 "query": "[0-9]{2} (.){4}s"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1
14 }
15 }
16])

A query acima retorna os seguintes resultados:

{ "title" : "20 Dates" }
{ "title" : "25 Watts" }
{ "title" : "21 Grams" }
{ "title" : "13 Lakes" }
{ "title" : "18 Meals" }
{ "title" : "17 Girls" }
{ "title" : "16 Acres" }
{ "title" : "26 Years" }
{ "title" : "99 Homes" }
{ "title" : "45 Years" }

Voltar

faixa