MongoDB - Espressione regolare
Le espressioni regolari vengono spesso utilizzate in tutte le lingue per cercare un modello o una parola in qualsiasi stringa. MongoDB fornisce anche funzionalità di espressione regolare per la corrispondenza del modello di stringa utilizzando il$regexoperatore. MongoDB utilizza PCRE (Perl Compatible Regular Expression) come linguaggio di espressioni regolari.
A differenza della ricerca di testo, non è necessario eseguire alcuna configurazione o comando per utilizzare le espressioni regolari.
Supponiamo di aver inserito un documento in un database denominato posts come mostrato di seguito -
> db.posts.insert(
{
"post_text": "enjoy the mongodb articles on tutorialspoint",
"tags": [
"mongodb",
"tutorialspoint"
]
}
WriteResult({ "nInserted" : 1 })
Utilizzo dell'espressione regex
La seguente query regex cerca tutti i post contenenti string tutorialspoint in esso -
> 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"
]
}
>
La stessa query può essere scritta anche come:
>db.posts.find({post_text:/tutorialspoint/})
Utilizzo dell'espressione regex con case insensitive
Per rendere insensibile alle maiuscole / minuscole di ricerca, utilizziamo $options parametro con valore $i. Il comando seguente cercherà le stringhe con la parolatutorialspoint, indipendentemente dal caso più piccolo o maiuscolo -
>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})
Uno dei risultati restituiti da questa query è il seguente documento che contiene la parola tutorialspoint in diversi casi -
{
"_id" : ObjectId("53493d37d852429c10000004"),
"post_text" : "hey! this is my post on TutorialsPoint",
"tags" : [ "tutorialspoint" ]
}
Utilizzo di regex per elementi array
Possiamo anche usare il concetto di regex sul campo array. Ciò è particolarmente importante quando implementiamo la funzionalità dei tag. Quindi, se vuoi cercare tutti i post con tag che iniziano dalla parola tutorial (tutorial o tutorial o tutorialpoint o tutorialphp), puoi utilizzare il seguente codice:
>db.posts.find({tags:{$regex:"tutorial"}})
Ottimizzazione delle query di espressioni regolari
Se i campi del documento sono indexed, la query utilizzerà valori indicizzati per corrispondere all'espressione regolare. Questo rende la ricerca molto veloce rispetto all'espressione regolare che scansiona l'intera collezione.
Se l'espressione regolare è un file prefix expression, tutte le corrispondenze devono iniziare con una determinata stringa di caratteri. Ad esempio, se l'espressione regex è^tut, quindi la query deve cercare solo le stringhe che iniziano con tut.