Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

regex (MongoDB Search Operador)

regex

regex interpreta el campo query como una expresión regular. regex es un operador a nivel de término, lo que significa que el campo query no se analiza.

Tip

  • analizador.

  • Ejemplo de campo analizado.

Nota

El lenguaje de expresiones regulares disponible para el operador regex es un subconjunto limitado del PCRE librería.

Para obtener información detallada, consulta la clase RegExp documentación.

regex tiene la siguiente sintaxis:

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 utiliza los siguientes términos para construir una query:

Campo
Tipo
Descripción
Necesidad
predeterminado

query

string o arreglo de strings

String o strings de búsqueda.

path

string o arreglo de strings

Campo o campos indexados para buscar. También puedes especificar una ruta comodín para buscar.

allowAnalyzedField

booleano

Debe establecerse en true si la consulta se ejecuta en un campo analizado.

no

false

score

Objeto

Puntuación para asignar a los resultados coincidentes de términos de búsqueda. Las opciones son:

  • boostMultiplica la puntuación resultante por el número dado.

  • constant:reemplace la puntuación del resultado con el número dado.

  • function: reemplaza el resultado de la puntuación con la expresión dada.

no

regex query Es un standard operador a nivel de término, lo que significa que el campo no se analiza. Las búsquedas de expresiones regulares funcionan bien con el analizador de palabras clave, ya que indexa los campos palabra por palabra. Para realizar una búsqueda que distinga entre mayúsculas y minúsculas, no utilice el analizador predeterminado (el analizador estándar), ya que el analizador convierte todos los términos en minúsculas. En su lugar, especifique otro analizador.

Es posible utilizar el operador regex para realizar búsquedas en un campo analizado configurando la opción allowAnalyzedField en true, pero se pueden obtener resultados inesperados.

Ejemplo

Buscar .*Star Trek.* en un campo indexado con el analizador de palabras clave encuentra todos los documentos en los que el campo contiene la string Star Trek en cualquier contexto. Buscar .*Star Trek.* en un campo indexado con el analizador estándar no arroja resultados porque hay un espacio entre Star y Trek, y el índice no contiene espacios.

El operador MongoDB Search regex utiliza el motor de expresiones regulares de Lucene, que difiere de las expresiones regulares compatibles con Perl.

Los siguientes caracteres están reservados como operadores cuando se usan en expresiones regulares:

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

Para utilizar cualquiera de los caracteres anteriores literalmente en una expresión de coincidencia, antepóngale un carácter \.

Ejemplo

who\? coincide con "¿quién?"

Al utilizar el carácter de escape en o mongosh con un controlador, debe utilizar una barra invertida doble antes del carácter que se va a escapar.

Ejemplo

Para crear una expresión comodín que busque cualquier string que contenga un asterisco literal en una canalización de agregación, utilice la siguiente expresión:

"*\\**"

El primer y último asteriscos actúan como comodines que coinciden con cualquier carácter, y el \\* coincide con un asterisco literal.

Nota

Utiliza la siguiente expresión para escapar una barra invertida literal:

"*\\\*"
Operador
Descripción
Ejemplo

.

Coincide con cualquier carácter.

x.z matches "xyz", "xaz", etc.

?

El carácter anterior es opcional y coincide si ocurre no más de una vez.

xyz? coincide con "xy" y "xyz"

+

El carácter anterior coincide si aparece una o más veces.

xy+ coincide con "xy", "xyy", "xyyy", etc.

*

El carácter anterior coincide si aparece cualquier número de veces.

xyz* coincide con "xy", "xyz", "xyzz", etc.

|

El operador OR. La expresión coincide si cualquiera de los dos patrones a ambos lados del operador | coincide.

abc|xyz coincide con "abc" o "xyz"

{<number>}

El carácter anterior coincide si aparece exactamente <number> <número> veces.

xyz{3} coincide con "xyzzz"

()

Los caracteres entre paréntesis se tratan como una sola unidad para fines de coincidencia.

xyz(abc)[2] coincide con "xyzabcabc"

[]

Coincide con cualquiera de los caracteres dentro de los corchetes.

Agregar un ^ al principio coincide con cualquier carácter excepto aquellos dentro de los corchetes.

Dentro de los corchetes cuadrados, - indica un rango, a menos que - sea el primer carácter o se escape con un \.

[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

<>

Coincidir con un rango numérico.

<1-3> coincide con "1", "2" y "3"

#

El operador de lenguaje vacío. El operador # no coincide con ninguna string, incluida una string vacía.

#|xyz coincide con "xyz" y nada más

regex No se admiten operadores de anclaje. Por ejemplo, estos operadores no son compatibles:

  • ^y que corresponde al inicio de una línea.

  • $, que coincide con el final de una línea.

Para que coincida con un término, la expresión regular debe coincidir con toda la cadena.

Los siguientes ejemplos utilizan la colección movies en la base de datos sample_mflix con una definición de índice personalizada que emplea el analizador de palabras clave. Si tienes el conjunto de datos de muestra en tu clúster, puedes crear un índice de búsqueda de MongoDB Search en la colección movies y ejecutar las consultas de ejemplo en tu clúster.

La siguiente definición de índice indexa el campo title en la colección movies con el Analizador de palabras clave:

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

The following example searches all title fields for movie titles that end with the word Seattle. The (.*) regular expression matches any number of characters.

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])
{ "title" : "Sleepless in Seattle" }
{ "title" : "Battle in Seattle" }

El siguiente ejemplo utiliza la expresión regular [0-9]{2} (.){4}s para encontrar títulos de películas que empiezan con un número de dos dígitos seguido de un espacio y terminan con una palabra de cinco letras que termina en 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])
{ "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" }

El siguiente ejemplo utiliza la expresión regular .* para encontrar títulos de películas que contengan el término summer en cualquier lugar del title y retorna el número de películas que cumplen con el criterio en cada género.

1db.movies.aggregate([
2 {
3 "$searchMeta": {
4 "facet": {
5 "operator": {
6 "regex": {
7 "path": "title",
8 "query": ".*summer.*"
9 }
10 },
11 "facets": {
12 "genresFacet": {
13 "type": "string",
14 "path": "genres"
15 }
16 }
17 }
18 }
19 }
20])
[
{
count: { lowerBound: Long('6') },
facet: {
genresFacet: {
buckets: [
{ _id: 'Comedy', count: Long('5') },
{ _id: 'Fantasy', count: Long('3') },
{ _id: 'Romance', count: Long('3') },
{ _id: 'Drama', count: Long('2') },
{ _id: 'Horror', count: Long('1') },
{ _id: 'Mystery', count: Long('1') }
]
}
}
}
]

Volver

rango

En esta página