Utilizzare le espressioni regolari in MongoDB

Le espressioni regolari (regex) sono uno strumento potente per effettuare ricerche flessibili nei documenti MongoDB. Possono essere utilizzate per confrontare stringhe in base a pattern, senza dover specificare esattamente l’intero valore del campo. MongoDB supporta le regex nello stile di JavaScript.

Sintassi di base

Per utilizzare una regex in una query MongoDB, si usa il costruttore RegExp oppure una stringa regex con il modificatore $regex.


// Utilizzando la sintassi RegExp
db.users.find({ name: /marco/ });

// Utilizzando $regex
db.users.find({ name: { $regex: "marco" } });

Opzioni di regex

È possibile specificare opzioni come i per ignorare il maiuscolo/minuscolo, m per la modalità multilinea e altre. Le opzioni possono essere incorporate o passate con $options.


// Ignora maiuscole/minuscole
db.users.find({ name: { $regex: "^marco", $options: "i" } });

Esempi pratici

Trovare tutti i documenti il cui campo email termina con "@example.com"


db.customers.find({ email: /@example\.com$/ });

Ricerca insensibile al caso


db.products.find({ category: { $regex: "^elettronica", $options: "i" } });

Stringa che contiene almeno tre lettere maiuscole consecutive


db.posts.find({ content: /[A-Z]{3,}/ });

Considerazioni sulle performance

Le query basate su espressioni regolari possono essere lente, specialmente se il pattern inizia con un carattere jolly (come .*) o se applicato su campi non indicizzati. Quando possibile, limitare l’uso delle regex a pattern che iniziano con caratteri fissi.


// Efficiente se 'name' è indicizzato
db.users.find({ name: /^Luca/ });

// Inefficiente, non può sfruttare l’indice
db.users.find({ name: /ca$/ });

Conclusioni

Le espressioni regolari in MongoDB sono uno strumento utile per eseguire ricerche avanzate su stringhe. Tuttavia, è importante usarle con attenzione per evitare impatti negativi sulle performance. Quando possibile, abbina le regex a filtri aggiuntivi e indicizza i campi utilizzati nelle query.

Torna su