Docs Menu
Docs Home
/ /

$regexMatch (agregación)

$regexMatch

Realiza una coincidencia de patrón de expresión regular (regex) y devuelve:

  • true si existe una coincidencia.

  • false Si no existe ninguna coincidencia.

El $regexMatch El operador tiene la siguiente sintaxis:

{ $regexMatch: { input: <expression> , regex: <expression>, options: <expression> } }
Campo
Descripción

entrada

La cadena a la que se desea aplicar el patrón de expresión regular. Puede ser una cadena o cualquier expresión válida que se resuelva en una cadena.

El patrón de expresión regular que se aplicará. Puede ser cualquier expresión válida que se resuelva en una cadena o en el patrón de expresión /<pattern>/ regular. Al usar la expresión /<pattern>/ regular, también puede especificar las opciones i y m (pero no las opciones s x o):

  • "pattern"

  • /<pattern>/

  • /<pattern>/<options>

Como alternativa, también puede especificar las opciones de expresiones regulares con el campo de opciones. Para especificar las s x opciones o, debe usar el campo de opciones.

No se pueden especificar opciones en el campo regex y en el campo options.

Opcional. Los siguientes <options> están disponibles para su uso con expresiones regulares.

No se pueden especificar opciones en el campo regex y en el campo options.

Opción
Descripción

i

No se distingue entre mayúsculas y minúsculas. Puede especificar la opción en el campo options o como parte del campo de expresión regular.

m

Para patrones que incluyen anclajes (es decir, ^ para el inicio, $ para el final), haz coincidir al principio o al final de cada línea para strings con valores de varias líneas. Sin esta opción, estos anclajes coinciden al principio o al final del string.

Si el patrón no contiene anclas o si el valor de la string no tiene caracteres de nueva línea (p. ej., \n), la opción m no tiene efecto.

x

Capacidad "extendida" para ignorar todos los caracteres de espacio en blanco en el patrón a menos que se escapen o se incluyan en una clase de carácter.

Además, ignora los caracteres entre un carácter de hash/pound (#) sin escape y la siguiente nueva línea, para que pueda incluir comentarios en patrones complicados. Esto solo se aplica a los caracteres de datos; los caracteres de espacio en blanco nunca deben aparecer dentro de las secuencias de caracteres especiales en un patrón.

La opción x no afecta el manejo del carácter VT (es decir, código 11).

Puede especificar la opción sólo en el campo options.

s

Permite el carácter punto (es decir, .) para que coincidan todos los caracteres incluidos los caracteres de salto de línea.

Puede especificar la opción sólo en el campo options.

El operador devuelve un valor booleano:

  • true si existe una coincidencia.

  • false Si no existe ninguna coincidencia.

Tip

A partir de la 6.1 versión, MongoDB utiliza la2 biblioteca PCRE (Perl Compatible Regular Expressions) para implementar la coincidencia de patrones de expresiones regulares. Para obtener más información sobre PCRE,2 consulte la documentación de PCRE.

La coincidencia de cadenas $regexMatch para siempre distingue entre mayúsculas y minúsculas y signos diacríticos. $regexMatch ignora la intercalación especificada para la colección,, y el índice, si sedb.collection.aggregate() utiliza.

Por ejemplo, cree una colección con un nivel de intercalación de 1, lo que significa que la intercalación solo compara caracteres base e ignora diferencias como mayúsculas y minúsculas y diacríticos:

db.createCollection( "restaurants", { collation: { locale: "fr", strength: 1 } } )

Inserte los siguientes documentos:

db.restaurants.insertMany( [
{ _id: 1, category: "café", status: "Open" },
{ _id: 2, category: "cafe", status: "open" },
{ _id: 3, category: "cafE", status: "open" }
] )

A continuación se utiliza la intercalación de la colección para realizar una coincidencia que no distingue entre mayúsculas y minúsculas ni entre signos diacríticos:

db.restaurants.aggregate( [ { $match: { category: "cafe" } } ] )
[
{ _id: 1, category: 'café', status: 'Open' },
{ _id: 2, category: 'cafe', status: 'open' },
{ _id: 3, category: 'cafE', status: 'open' }
]

Sin embargo, $regexMatch ignora la intercalación. Los siguientes ejemplos de coincidencias de patrones de expresiones regulares distinguen entre mayúsculas y minúsculas y entre diacríticos:

db.restaurants.aggregate( [
{
$addFields: {
resultObject: { $regexMatch: { input: "$category", regex: /cafe/ } }
}
}
] )
db.restaurants.aggregate( [
{
$addFields: {
resultObject: { $regexMatch: { input: "$category", regex: /cafe/ } }
}
}
],
{ collation: { locale: "fr", strength: 1 } } // Ignored in the $regexMatch
)

Ambas operaciones devuelven lo siguiente:

{ "_id" : 1, "category" : "café", "resultObject" : null }
{ "_id" : 2, "category" : "cafe", "resultObject" : { "match" : "cafe", "idx" : 0, "captures" : [ ] } }
{ "_id" : 3, "category" : "cafE", "resultObject" : null }

Debido a que la consulta ignora la intercalación, requiere una coincidencia exacta en la cadena category (incluyendo mayúsculas y minúsculas y tildes), lo que significa que solo coincide con el documento _id: 2.

Para realizar una coincidencia de patrones de expresiones regulares sin distinguir entre mayúsculas y minúsculas, utilice la opción. Consulte la i i opción para ver un ejemplo.

Para ilustrar el comportamiento del operador como se analiza en este ejemplo, cree una colección de $regexMatch muestra products con los siguientes documentos:

db.products.insertMany([
{ _id: 1, description: "Single LINE description." },
{ _id: 2, description: "First lines\nsecond line" },
{ _id: 3, description: "Many spaces before line" },
{ _id: 4, description: "Multiple\nline descriptions" },
{ _id: 5, description: "anchors, links and hyperlinks" },
{ _id: 6, description: "métier work vocation" }
])

De forma predeterminada, realiza una coincidencia que distingue entre mayúsculas y minúsculas. $regexMatch Por ejemplo, la siguiente agregación realiza una que distingue entre mayúsculas y $regexMatch minúsculas en el description campo. El patrón de expresión regular /line/ no especifica ninguna agrupación:

db.products.aggregate([
{ $addFields: { result: { $regexMatch: { input: "$description", regex: /line/ } } } }
])

La operación devuelve lo siguiente:

{ "_id" : 1, "description" : "Single LINE description.", "result" : false }
{ "_id" : 2, "description" : "First lines\nsecond line", "result" : true }
{ "_id" : 3, "description" : "Many spaces before line", "result" : true }
{ "_id" : 4, "description" : "Multiple\nline descriptions", "result" : true }
{ "_id" : 5, "description" : "anchors, links and hyperlinks", "result" : false }
{ "_id" : 6, "description" : "métier work vocation", "result" : false }

El siguiente patrón de expresión regular /lin(e|k)/ especifica una agrupación (e|k) en el patrón:

db.products.aggregate([
{ $addFields: { result: { $regexMatch: { input: "$description", regex: /lin(e|k)/ } } } }
])

La operación devuelve lo siguiente:

{ "_id" : 1, "description" : "Single LINE description.", "result" : false }
{ "_id" : 2, "description" : "First lines\nsecond line", "result" : true }
{ "_id" : 3, "description" : "Many spaces before line", "result" : true }
{ "_id" : 4, "description" : "Multiple\nline descriptions", "result" : true }
{ "_id" : 5, "description" : "anchors, links and hyperlinks", "result" : true }
{ "_id" : 6, "description" : "métier work vocation", "result" : false }

Nota

No se pueden especificar opciones en el campo regex y en el campo options.

Para realizar una coincidencia de patrones sindistinguir entre mayúsculas y minúsculas, incluya la opción i como parte del campo de expresión regular o en el campo de opciones:

// Specify i as part of the regex field
{ $regexMatch: { input: "$description", regex: /line/i } }
// Specify i in the options field
{ $regexMatch: { input: "$description", regex: /line/, options: "i" } }
{ $regexMatch: { input: "$description", regex: "line", options: "i" } }

Por ejemplo, la siguiente agregación realiza una agregación sindistinción entre mayúsculas $regexMatch y minúsculas en el description campo. El patrón de expresión regular /line/ no especifica ninguna agrupación:

db.products.aggregate([
{ $addFields: { result: { $regexMatch: { input: "$description", regex: /line/i } } } }
])

La operación devuelve los siguientes documentos:

{ "_id" : 1, "description" : "Single LINE description.", "result" : true }
{ "_id" : 2, "description" : "First lines\nsecond line", "result" : true }
{ "_id" : 3, "description" : "Many spaces before line", "result" : true }
{ "_id" : 4, "description" : "Multiple\nline descriptions", "result" : true }
{ "_id" : 5, "description" : "anchors, links and hyperlinks", "result" : false }
{ "_id" : 6, "description" : "métier work vocation", "result" : false }

Nota

No se pueden especificar opciones en el campo regex y en el campo options.

Para que coincidan los anclajes especificados (por^ $ejemplo,,) para cada línea de una cadena de varias líneas, incluya la opción m como parte del campo de expresión regular o en el campo de opciones:

// Specify m as part of the regex field
{ $regexMatch: { input: "$description", regex: /line/m } }
// Specify m in the options field
{ $regexMatch: { input: "$description", regex: /line/, options: "m" } }
{ $regexMatch: { input: "$description", regex: "line", options: "m" } }

El siguiente ejemplo incluye las opciones i y m para hacer coincidir líneas que comiencen con la letra s o S para cadenas de varias líneas:

db.products.aggregate([
{ $addFields: { result: { $regexMatch: { input: "$description", regex: /^s/im } } } }
])

La operación devuelve lo siguiente:

{ "_id" : 1, "description" : "Single LINE description.", "result" : true }
{ "_id" : 2, "description" : "First lines\nsecond line", "result" : true }
{ "_id" : 3, "description" : "Many spaces before line", "result" : false }
{ "_id" : 4, "description" : "Multiple\nline descriptions", "result" : false }
{ "_id" : 5, "description" : "anchors, links and hyperlinks", "result" : false }
{ "_id" : 6, "description" : "métier work vocation", "result" : false }

Nota

No se pueden especificar opciones en el campo regex y en el campo options.

Para ignorar todos los caracteres de espacio en blanco sin escapar y los comentarios (indicados por el # carácter almohadilla sin escapar y el siguiente carácter de nueva línea) en el patrón, incluya la opción s en el campo de opciones:

// Specify x in the options field
{ $regexMatch: { input: "$description", regex: /line/, options: "x" } }
{ $regexMatch: { input: "$description", regex: "line", options: "x" } }

El siguiente ejemplo incluye la opción x para omitir espacios en blanco y comentarios sin escape:

db.products.aggregate([
{ $addFields: { returns: { $regexMatch: { input: "$description", regex: /lin(e|k) # matches line or link/, options:"x" } } } }
])

La operación devuelve lo siguiente:

{ "_id" : 1, "description" : "Single LINE description.", "returns" : false }
{ "_id" : 2, "description" : "First lines\nsecond line", "returns" : true }
{ "_id" : 3, "description" : "Many spaces before line", "returns" : true }
{ "_id" : 4, "description" : "Multiple\nline descriptions", "returns" : true }
{ "_id" : 5, "description" : "anchors, links and hyperlinks", "returns" : true }
{ "_id" : 6, "description" : "métier work vocation", "returns" : false }

Nota

No se pueden especificar opciones en el campo regex y en el campo options.

Para permitir que el carácter de punto (es. decir,) en el patrón coincida con todos los caracteres, incluido el carácter de nueva línea, incluya la opción s en el campo de opciones:

// Specify s in the options field
{ $regexMatch: { input: "$description", regex: /m.*line/, options: "s" } }
{ $regexMatch: { input: "$description", regex: "m.*line", options: "s" } }

El siguiente ejemplo incluye la opción s para permitir que el carácter de punto (es decir, .) coincida con todos los caracteres, incluida la nueva línea, así como la opción i para realizar una coincidencia sin distinguir entre mayúsculas y minúsculas:

db.products.aggregate([
{ $addFields: { returns: { $regexMatch: { input: "$description", regex:/m.*line/, options: "si" } } } }
])

La operación devuelve lo siguiente:

{ "_id" : 1, "description" : "Single LINE description.", "returns" : false }
{ "_id" : 2, "description" : "First lines\nsecond line", "returns" : false }
{ "_id" : 3, "description" : "Many spaces before line", "returns" : true }
{ "_id" : 4, "description" : "Multiple\nline descriptions", "returns" : true }
{ "_id" : 5, "description" : "anchors, links and hyperlinks", "returns" : false }
{ "_id" : 6, "description" : "métier work vocation", "returns" : false }

Cree una colección de muestra feedback con los siguientes documentos:

db.feedback.insertMany([
{ "_id" : 1, comment: "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com" },
{ "_id" : 2, comment: "I wanted to concatenate a string" },
{ "_id" : 3, comment: "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com" },
{ "_id" : 4, comment: "It's just me. I'm testing. fred@MongoDB.com" }
])

La siguiente agregación utiliza para verificar si $regexMatch el comment campo contiene una dirección de correo electrónico con @mongodb.com y categoriza los comentarios como Employee Externalo.

db.feedback.aggregate( [
{ $addFields: {
"category": { $cond: { if: { $regexMatch: { input: "$comment", regex: /[a-z0-9_.+-]+@mongodb.com/i } },
then: "Employee",
else: "External" } }
} },

La operación devuelve los siguientes documentos:

{ "_id" : 1, "comment" : "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com", "category" : "External" }
{ "_id" : 2, "comment" : "I wanted to concatenate a string", "category" : "External" }
{ "_id" : 3, "comment" : "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com", "category" : "Employee" }
{ "_id" : 4, "comment" : "It's just me. I'm testing. fred@MongoDB.com", "category" : "Employee" }

Volver

$regexFindAll

En esta página