MongoDB - Expressão Regular
Expressões regulares são freqüentemente usadas em todos os idiomas para pesquisar um padrão ou palavra em qualquer string. O MongoDB também fornece funcionalidade de expressão regular para correspondência de padrões de string usando o$regexoperador. MongoDB usa PCRE (Perl Compatible Regular Expression) como linguagem de expressão regular.
Ao contrário da pesquisa de texto, não precisamos fazer nenhuma configuração ou comando para usar expressões regulares.
Suponha que inserimos um documento em um banco de dados chamado posts como mostrado abaixo -
> db.posts.insert(
{
"post_text": "enjoy the mongodb articles on tutorialspoint",
"tags": [
"mongodb",
"tutorialspoint"
]
}
WriteResult({ "nInserted" : 1 })
Usando expressão regex
A seguinte consulta regex procura por todos os posts contendo string tutorialspoint nele -
> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty()
{
"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
{
"_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
>
A mesma consulta também pode ser escrita como -
>db.posts.find({post_text:/tutorialspoint/})
Usando expressão regex com diferenciação de maiúsculas e minúsculas
Para tornar a pesquisa insensível a maiúsculas e minúsculas, usamos o $options parâmetro com valor $i. O seguinte comando irá procurar por strings com a palavratutorialspoint, independentemente do caso menor ou capital -
>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})
Um dos resultados retornados desta consulta é o seguinte documento que contém a palavra tutorialspoint em casos diferentes -
{
"_id" : ObjectId("53493d37d852429c10000004"),
"post_text" : "hey! this is my post on TutorialsPoint",
"tags" : [ "tutorialspoint" ]
}
Usando regex para elementos de matriz
Também podemos usar o conceito de regex no campo array. Isso é particularmente importante quando implementamos a funcionalidade de tags. Portanto, se você deseja pesquisar todos os posts que têm tags começando com a palavra tutorial (tanto tutorial ou tutoriais ou tutorialpoint ou tutorialphp), você pode usar o seguinte código -
>db.posts.find({tags:{$regex:"tutorial"}})
Otimizando Consultas de Expressão Regular
Se os campos do documento forem indexed, a consulta usará valores indexados para corresponder à expressão regular. Isso torna a pesquisa muito rápida em comparação com a expressão regular que examina a coleção inteira.
Se a expressão regular for um prefix expression, todas as correspondências devem começar com certos caracteres de string. Por exemplo, se a expressão regex é^tut, então a consulta deve procurar apenas as strings que começam com tut.