MongoDB Regular Expression (Regex) con esempi

Sommario:

Anonim

Le espressioni regolari vengono utilizzate per la corrispondenza dei modelli, che è fondamentalmente per le stringhe dei risultati all'interno dei documenti.

A volte, durante il recupero di documenti in una raccolta, potresti non sapere esattamente quale sia il valore esatto del campo da cercare. Quindi, è possibile utilizzare espressioni regolari per facilitare il recupero dei dati in base ai valori di ricerca di corrispondenza del modello.

In questo tutorial imparerai:

  • Utilizzo dell'operatore $ regex per la corrispondenza del modello
  • Corrispondenza del modello con $ opzioni
  • Pattern matching senza l'operatore regex
  • Recupero degli ultimi "n" documenti da una raccolta

Utilizzo dell'operatore $ regex per la corrispondenza del modello

L'operatore regex in MongoDB viene utilizzato per cercare stringhe specifiche nella raccolta. L'esempio seguente mostra come eseguire questa operazione.

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

ID Dipendente Nome dipendente
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

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

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

Spiegazione del codice:

  1. Qui vogliamo trovare tutti i nomi dei dipendenti che contengono i caratteri "Gu". Quindi, specifichiamo l'operatore $ regex per definire i criteri di ricerca di 'Gu'
  2. Il 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:

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

Se supponi che la tua collezione abbia i seguenti documenti con un documento aggiuntivo che conteneva il nome del dipendente come "Guru999". Se hai inserito i criteri di ricerca come "Guru99", restituirà anche il documento che aveva "Guru999". Ma supponiamo se non lo volessimo e volessimo solo restituire il documento con "Guru99". Quindi possiamo farlo con la corrispondenza esatta del modello. Per eseguire 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 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

L'esempio seguente mostra come eseguire questa operazione.

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

Spiegazione del codice:

  1. Qui nei criteri di ricerca, stiamo usando i caratteri e $. Il è usato per assicurarsi che la stringa inizi con un certo carattere e $ è usato per assicurarsi che la stringa finisca con un certo carattere. Quindi, quando il codice viene eseguito, recupererà solo la stringa con il nome "Guru99".
  2. Il 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:

Nell'output, è chiaramente visibile che la stringa "Guru99" è stata caricata.

Corrispondenza del modello con $ opzioni

Quando si utilizza l'operatore regex, è anche possibile fornire opzioni aggiuntive utilizzando la parola chiave $ options . Ad esempio, si supponga di voler trovare tutti i documenti che avevano "Gu" nel nome del dipendente, indipendentemente dal fatto che facesse distinzione tra maiuscole e minuscole o insensibile. Se si desidera un tale risultato, è necessario utilizzare le opzioni $ con il parametro di insensibilità al maiuscolo / minuscolo.

L'esempio seguente mostra come eseguire questa operazione.

Supponiamo di avere la nostra stessa raccolta Employee che ha i nomi di campo "Employeeid" e "EmployeeName".

Supponiamo inoltre di avere i seguenti documenti nella nostra raccolta.

ID Dipendente Nome dipendente
22 NewMartin
2 Mohan
3 Joe
4 MohanR
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 sia incluso nel set di risultati, dobbiamo aggiungere il parametro $ options "I".

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

Spiegazione del codice:

  1. Le opzioni $ con parametro 'I' (che significa insensibilità al maiuscolo / minuscolo) specifica che vogliamo effettuare la ricerca indipendentemente dal fatto che troviamo le lettere 'Gu' in minuscolo o maiuscolo.

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

Produzione:

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

Pattern matching senza l'operatore regex

Si può anche fare il pattern matching senza l'operatore regex. L'esempio seguente mostra come eseguire questa operazione.

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

Spiegazione del codice:

  1. L'opzione "//" significa fondamentalmente specificare i criteri di ricerca all'interno di questi delimitatori. Quindi, stiamo specificando / Gu / per trovare di nuovo quei documenti che hanno "Gu" nel loro EmployeeName.

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

Produzione:

L'output mostra chiaramente che vengono restituiti quei 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 tramite i seguenti passaggi

L'esempio seguente mostra come eseguire questa operazione.

Supponiamo di avere la nostra stessa raccolta Employee che ha i nomi di campo "Employeeid" e "EmployeeName".

Supponiamo inoltre di avere i seguenti documenti nella nostra raccolta:

ID Dipendente Nome dipendente
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Spiegazione del codice:

1) Quando si esegue una query per i 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 decrescente in modo che l'ultimo documento diventi il ​​primo documento da visualizzare.

2) Quindi utilizzare la clausola limit 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:

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 limit per restituire il numero "n" di documenti richiesti.

Nota : se la ricerca viene eseguita su una stringa maggiore di 38.000 caratteri, non verranno visualizzati i risultati corretti.

Sommario:

  • Il pattern matching può essere ottenuto dall'operatore $ regex. Questo operatore può essere utilizzato per trovare determinate stringhe nella raccolta.
  • I simboli e $ possono essere usati per ricerche di testo esatte con usato per assicurarsi che la stringa inizi con un certo carattere e $ usato per assicurarsi che la stringa termini con un certo carattere.
  • La 'i' insieme all'operatore $ regex può essere utilizzata per specificare l'insensibilità tra maiuscole e minuscole in modo che le stringhe possano essere cercate indipendentemente dal fatto che siano in lettere minuscole o maiuscole.
  • I delimitatori // possono essere utilizzati anche per la corrispondenza dei modelli.
  • Utilizza una combinazione di ordinamento e funzione limite per restituire gli ultimi n documenti nella raccolta. La funzione di ordinamento può essere utilizzata per restituire i documenti in ordine decrescente, dopodiché la clausola limit può essere utilizzata per limitare il numero di documenti restituiti.