MongoDB Espressioni regolari (Regex) con esempi

Le espressioni regolari vengono utilizzate per la corrispondenza dei modelli, che รจ fondamentalmente per trovare stringhe all'interno dei documenti.

A volte, quando si recuperano documenti in una raccolta, potresti non sapere esattamente quale sia l'esatto valore del campo da cercare. Pertanto, รจ possibile utilizzare le espressioni regolari per facilitare il recupero dei dati in base ai valori di ricerca corrispondenti ai modelli.

Utilizzo dell'operatore $regex per la corrispondenza dei modelli

Migliori operatore regex in MongoDB viene utilizzato per cercare stringhe specifiche nella collezione. L'esempio seguente mostra come ciรฒ puรฒ essere fatto.

Supponiamo di avere la stessa raccolta Employee che ha i nomi Field di "Employeeid" e "EmployeeName". Supponiamo inoltre di avere i seguenti documenti nella nostra raccolta.

ID Dipendente Nome dipendente
22 Nuovo Martin
2 Mohan
3 Joe
4 Mohan R
100 Guru99
6 Gurang

Qui nel codice seguente abbiamo utilizzato l'operatore regex per specificare i criteri di ricerca.

Utilizzando $regex Operator per la corrispondenza dei modelli

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

Code Spiegazione:

  1. Qui vogliamo trovare tutti i nomi dei dipendenti che contengono i caratteri "Gu". Pertanto, specifichiamo l'operatore $regex per definire i criteri di ricerca di 'Gu'
  2. printjson viene utilizzato per stampare ogni documento restituito dalla query in un modo migliore.

Se il comando viene eseguito correttamente, verrร  visualizzato il seguente output:

Produzione:

Utilizzando $regex Operator per la corrispondenza dei modelli

L'output mostra chiaramente che vengono restituiti i documenti in cui il nome del dipendente contiene i caratteri "Gu".

Supponiamo che la tua raccolta contenga i seguenti documenti con un documento aggiuntivo che contiene il nome del dipendente come "Guru999โ€. Se hai inserito i criteri di ricerca come โ€œGuru99โ€, restituirebbe anche il documento che aveva โ€œGuru999โ€. Ma supponiamo di non volerlo e di voler restituire il documento solo con โ€œGuru99โ€. Quindi possiamo farlo con la corrispondenza esatta del modello. Per fare una corrispondenza esatta del modello, useremo i caratteri ^ e $. Aggiungeremo il carattere ^ all'inizio della stringa e $ alla fine della stringa.

ID Dipendente Nome dipendente
22 Nuovo Martin
2 Mohan
3 Joe
4 Mohan R
100 Guru99
6 Gurang
8 Guru999

L'esempio seguente mostra come farlo.

Utilizzando $regex Operator per la corrispondenza dei modelli

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)

Code Spiegazione:

  1. Qui nei criteri di ricerca, stiamo usando i caratteri ^ e $. Il ^ viene utilizzato per assicurarsi che la stringa inizi con un determinato carattere e il $ viene utilizzato per assicurarsi che la stringa termini con un determinato carattere. Quindi quando il codice viene eseguito, estrarrร  solo la stringa con il nome "Guru99 ".
  2. printjson viene utilizzato per stampare ogni documento restituito dalla query in un modo migliore.

Se il comando viene eseguito correttamente, verrร  visualizzato il seguente output:

Produzione:

Utilizzando $regex Operator per la corrispondenza dei modelli

Nell'output รจ chiaramente visibile la stringa โ€œGuru99โ€ รจ stato recuperato.

Corrispondenza del modello con $ opzioni

Quando si utilizza l'operatore regex รจ anche possibile fornire opzioni aggiuntive utilizzando l' $ options parola chiave. Ad esempio, supponiamo di voler trovare tutti i documenti che contengono "Gu" nel nome del dipendente, indipendentemente dal fatto che faccia distinzione tra maiuscole e minuscole o meno. Se si desidera un risultato del genere, รจ necessario utilizzare il file $ options con il parametro di insensibilitร  alle maiuscole.

L'esempio seguente mostra come farlo.

Supponiamo di avere la stessa raccolta Employee con i nomi dei campi "Employeeid" e "EmployeeName".

Supponiamo inoltre di avere i seguenti documenti nella nostra collezione.

ID Dipendente Nome dipendente
22 Nuovo Martin
2 Mohan
3 Joe
4 Mohan R
100 Guru99
6 Gurang
7 GURU99

Ora, se eseguiamo la stessa query dell'ultimo argomento, non vedremmo mai il documento con "GURU99" nel risultato. Per garantire che questo venga incluso nel set di risultati, dobbiamo aggiungere il parametro $opzioni "I".

Corrispondenza del modello con $ opzioni

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)

Code Spiegazione:

  1. Le opzioni $ con il parametro 'I' (che significa distinzione tra maiuscole e minuscole) specificano che vogliamo effettuare la ricerca non importa se troviamo le lettere 'Gu' in minuscolo o maiuscolo.

Se il comando viene eseguito correttamente, verrร  visualizzato il seguente output:

Produzione:

Corrispondenza del modello con $ opzioni

  1. L'output mostra chiaramente che anche se un documento ha la lettera maiuscola "Gu", il documento viene comunque visualizzato nel set di risultati.

Corrispondenza di modelli senza l'operatore regex

Si puรฒ anche fare il pattern matching senza l'operatore regex. Il seguente esempio mostra come si puรฒ fare.

Pattern Matching senza Regex Operator

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

Code Spiegazione:

  1. Le opzioni "//" significano fondamentalmente specificare i criteri di ricerca all'interno di questi delimitatori. Pertanto, stiamo specificando /Gu/ per trovare nuovamente i documenti che hanno "Gu" nel loro EmployeeName.

Se il comando viene eseguito correttamente, verrร  visualizzato il seguente output:

Produzione:

Pattern Matching senza Regex Operator

L'output mostra chiaramente che vengono restituiti i documenti in cui il nome del dipendente contiene i caratteri "Gu".

Recupero degli ultimi 'n' documenti da una raccolta

Esistono vari modi per ottenere gli ultimi n documenti in una raccolta.

Diamo un'occhiata a uno dei modi attraverso i seguenti passaggi

L'esempio seguente mostra come farlo.

Supponiamo di avere la stessa raccolta Employee con i nomi dei campi "Employeeid" e "EmployeeName".

Supponiamo inoltre di avere i seguenti documenti nella nostra collezione:

ID Dipendente Nome dipendente
22 Nuovo Martin
2 Mohan
3 Joe
4 Mohan R
100 Guru99
6 Gurang
7 GURU99

Recupero degli ultimi 'n' documenti da una raccolta

db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Code Spiegazione:

1) Quando si eseguono query sui documenti, utilizzare la funzione di ordinamento per ordinare i record in ordine inverso in base al valore del campo _id nella raccolta. Il -1 indica fondamentalmente di ordinare i documenti in ordine inverso o discendente in modo che l'ultimo documento diventi il โ€‹โ€‹primo documento ad essere visualizzato.

2) Quindi utilizzare la clausola limite per visualizzare solo il numero di record desiderati. Qui abbiamo impostato la clausola limite (2), quindi recupererร  gli ultimi due documenti.

Se il comando viene eseguito correttamente, verrร  visualizzato il seguente output:

Produzione:

Recupero degli ultimi 'n' documenti da una raccolta

L'output mostra chiaramente che vengono visualizzati gli ultimi due documenti della raccolta. Quindi abbiamo chiaramente dimostrato che per recuperare gli ultimi "n" documenti nella raccolta, possiamo prima ordinare i documenti in ordine decrescente e quindi utilizzare la clausola limite per restituire il numero "n" di documenti richiesti.

Note:: Se la ricerca viene eseguita su una stringa che supera, diciamo, 38,000 caratteri, non verranno visualizzati i risultati corretti.

Sintesi

  • La corrispondenza dei modelli puรฒ essere ottenuta dall'operatore $regex. Questo operatore puรฒ essere utilizzato per trovare determinate stringhe nella raccolta.
  • I simboli ^ e $ possono essere utilizzati per ricerche di testo esatte con ^ utilizzato per assicurarsi che la stringa inizi con un determinato carattere e $ utilizzato per garantire che la stringa termini con un determinato carattere.
  • La "i" insieme all'operatore $regex puรฒ essere utilizzata per specificare l'insensibilitร  alle maiuscole in modo che le stringhe possano essere cercate sia che siano in minuscolo che in maiuscolo.
  • I delimitatori // possono essere utilizzati anche per la corrispondenza dei modelli.
  • Utilizza una combinazione di sort e la funzione limit per restituire gli ultimi n documenti nella raccolta. La funzione di ordinamento puรฒ essere utilizzata per restituire i documenti in ordine decrescente, dopodichรฉ รจ possibile utilizzare la clausola limite per limitare il numero di documenti restituiti.

Riassumi questo post con: