Reguläre Ausdrücke werden für den Mustervergleich verwendet, dh für Befundzeichenfolgen in Dokumenten.
Manchmal wissen Sie beim Abrufen von Dokumenten in einer Sammlung möglicherweise nicht genau, nach welchem genauen Feldwert gesucht werden soll. Daher kann man reguläre Ausdrücke verwenden, um das Abrufen von Daten basierend auf Mustervergleichs-Suchwerten zu unterstützen.
In diesem Tutorial lernen Sie -
- Verwenden des $ regex-Operators für den Mustervergleich
- Musterübereinstimmung mit $ -Optionen
- Mustervergleich ohne den Regex-Operator
- Abrufen der letzten 'n' Dokumente aus einer Sammlung
Verwenden des $ regex-Operators für den Mustervergleich
Der Regex-Operator in MongoDB wird verwendet, um nach bestimmten Zeichenfolgen in der Sammlung zu suchen. Das folgende Beispiel zeigt, wie dies gemacht werden kann.
Nehmen wir an, wir haben dieselbe Employee-Sammlung mit den Feldnamen "Employeeid" und "EmployeeName". Nehmen wir auch an, wir haben die folgenden Dokumente in unserer Sammlung.
Angestellten ID | Mitarbeitername |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
Hier im folgenden Code haben wir den Regex-Operator verwendet, um die Suchkriterien anzugeben.
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
Code Erläuterung:
- Hier wollen wir alle Mitarbeiternamen finden, die die Zeichen 'Gu' enthalten. Daher geben wir den $ regex-Operator an, um die Suchkriterien von 'Gu' zu definieren.
- Der printjson wird verwendet, um jedes Dokument, das von der Abfrage zurückgegeben wird, besser zu drucken.
Wenn der Befehl erfolgreich ausgeführt wurde, wird die folgende Ausgabe angezeigt:
Ausgabe:
Die Ausgabe zeigt deutlich, dass die Dokumente zurückgegeben werden, in denen der Name des Mitarbeiters die Zeichen 'Gu' enthält.
Angenommen, Ihre Sammlung enthält die folgenden Dokumente mit einem zusätzlichen Dokument, das den Mitarbeiternamen "Guru999" enthält. Wenn Sie die Suchkriterien als "Guru99" eingeben, wird auch das Dokument mit "Guru999" zurückgegeben. Aber nehmen wir an, wir wollten das nicht und wollten das Dokument nur mit "Guru99" zurückgeben. Dann können wir dies mit genauem Mustervergleich tun. Um einen genauen Mustervergleich durchzuführen, verwenden wir die Zeichen und $. Wir werden das Zeichen am Anfang der Zeichenfolge und $ am Ende der Zeichenfolge hinzufügen.
Angestellten ID | Mitarbeitername |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
8 | Guru999 |
Das folgende Beispiel zeigt, wie dies gemacht werden kann.
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
Code Erläuterung:
- Hier in den Suchkriterien verwenden wir die Zeichen und $. Mit wird sichergestellt, dass die Zeichenfolge mit einem bestimmten Zeichen beginnt, und mit $ wird sichergestellt, dass die Zeichenfolge mit einem bestimmten Zeichen endet. Wenn der Code ausgeführt wird, wird nur die Zeichenfolge mit dem Namen "Guru99" abgerufen.
- Der printjson wird verwendet, um jedes Dokument, das von der Abfrage zurückgegeben wird, besser zu drucken.
Wenn der Befehl erfolgreich ausgeführt wurde, wird die folgende Ausgabe angezeigt:
Ausgabe:
In der Ausgabe ist deutlich zu erkennen, dass die Zeichenfolge "Guru99" abgerufen wird.
Musterübereinstimmung mit $ -Optionen
Wenn Sie den Regex-Operator verwenden, können Sie mithilfe des Schlüsselworts $ options auch zusätzliche Optionen bereitstellen . Angenommen, Sie möchten alle Dokumente finden, deren Mitarbeitername "Gu" enthält, unabhängig davon, ob zwischen Groß- und Kleinschreibung unterschieden wird. Wenn ein solches Ergebnis gewünscht wird, müssen wir die $ options mit dem Parameter case insensitivity verwenden.
Das folgende Beispiel zeigt, wie dies gemacht werden kann.
Nehmen wir an, wir haben dieselbe Employee-Sammlung mit den Feldnamen "Employeeid" und "EmployeeName".
Nehmen wir auch an, wir haben die folgenden Dokumente in unserer Sammlung.
Angestellten ID | Mitarbeitername |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
Wenn wir jetzt dieselbe Abfrage wie im letzten Thema ausführen, wird das Dokument mit "GURU99" im Ergebnis niemals angezeigt. Um sicherzustellen, dass dies in der Ergebnismenge enthalten ist, müssen wir den Parameter $ options "I" hinzufügen.
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
Code Erläuterung:
- Die $ -Optionen mit dem Parameter 'I' (was bedeutet, dass die Groß- und Kleinschreibung nicht berücksichtigt wird) geben an, dass die Suche ausgeführt werden soll, unabhängig davon, ob wir die Buchstaben 'Gu' in Klein- oder Großbuchstaben finden.
Wenn der Befehl erfolgreich ausgeführt wurde, wird die folgende Ausgabe angezeigt:
Ausgabe:
- Die Ausgabe zeigt deutlich, dass das Dokument zwar in Großbuchstaben 'Gu' angezeigt wird, das Dokument jedoch weiterhin in der Ergebnismenge angezeigt wird.
Mustervergleich ohne den Regex-Operator
Man kann den Mustervergleich auch ohne den Regex-Operator durchführen. Das folgende Beispiel zeigt, wie dies gemacht werden kann.
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
Code Erläuterung:
- Die Optionen "//" bedeuten im Wesentlichen, dass Sie Ihre Suchkriterien innerhalb dieser Trennzeichen angeben. Daher geben wir / Gu / an, um die Dokumente wieder zu finden, deren EmployeeName 'Gu' enthält.
Wenn der Befehl erfolgreich ausgeführt wurde, wird die folgende Ausgabe angezeigt:
Ausgabe:
Die Ausgabe zeigt deutlich, dass die Dokumente zurückgegeben werden, in denen der Name des Mitarbeiters die Zeichen 'Gu' enthält.
Abrufen der letzten 'n' Dokumente aus einer Sammlung
Es gibt verschiedene Möglichkeiten, die letzten n Dokumente in einer Sammlung abzurufen.
Schauen wir uns einen der Wege in den folgenden Schritten an
Das folgende Beispiel zeigt, wie dies gemacht werden kann.
Nehmen wir an, wir haben dieselbe Employee-Sammlung mit den Feldnamen "Employeeid" und "EmployeeName".
Nehmen wir auch an, wir haben folgende Dokumente in unserer Sammlung:
Angestellten ID | Mitarbeitername |
22 | NewMartin |
2 | Mohan |
3 | Joe |
4 | MohanR |
100 | Guru99 |
6 | Gurang |
7 | GURU99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
Code Erläuterung:
1) Verwenden Sie bei der Abfrage der Dokumente die Sortierfunktion, um die Datensätze in umgekehrter Reihenfolge basierend auf dem Feldwert _id in der Sammlung zu sortieren. Das -1 gibt grundsätzlich an, dass die Dokumente in umgekehrter oder absteigender Reihenfolge sortiert werden sollen, damit das letzte Dokument das erste Dokument ist, das angezeigt wird.
2) Verwenden Sie dann die Limit-Klausel, um nur die Anzahl der gewünschten Datensätze anzuzeigen. Hier haben wir die Limit-Klausel (2) festgelegt, damit die letzten beiden Dokumente abgerufen werden.
Wenn der Befehl erfolgreich ausgeführt wurde, wird die folgende Ausgabe angezeigt:
Ausgabe:
Die Ausgabe zeigt deutlich, dass die letzten beiden Dokumente in der Sammlung angezeigt werden. Daher haben wir deutlich gezeigt, dass wir zum Abrufen der letzten 'n' Dokumente in der Sammlung zuerst die Dokumente in absteigender Reihenfolge sortieren und dann die Limit-Klausel verwenden können, um die 'n' Anzahl der erforderlichen Dokumente zurückzugeben.
Hinweis : Wenn die Suche für eine Zeichenfolge durchgeführt wird, die größer als beispielsweise 38.000 Zeichen ist, werden nicht die richtigen Ergebnisse angezeigt.
Zusammenfassung:
- Der Mustervergleich kann durch den Operator $ regex erreicht werden. Dieser Operator kann verwendet werden, um nach bestimmten Zeichenfolgen in der Sammlung zu suchen.
- Die Symbole und $ können für exakte Textsuchen verwendet werden, wobei verwendet wird, um sicherzustellen, dass die Zeichenfolge mit einem bestimmten Zeichen beginnt, und $ verwendet wird, um sicherzustellen, dass die Zeichenfolge mit einem bestimmten Zeichen endet.
- Das 'i' kann zusammen mit dem $ regex-Operator verwendet werden, um die Groß- und Kleinschreibung nicht zu berücksichtigen, sodass Zeichenfolgen durchsucht werden können, unabhängig davon, ob sie in Klein- oder Großbuchstaben geschrieben sind.
- Die Trennzeichen // können auch für den Mustervergleich verwendet werden.
- Verwenden Sie eine Kombination aus Sortierung und Begrenzungsfunktion, um die letzten n Dokumente in der Sammlung zurückzugeben. Mit der Sortierfunktion können die Dokumente in absteigender Reihenfolge zurückgegeben werden. Anschließend kann die Limit-Klausel verwendet werden, um die Anzahl der zurückgegebenen Dokumente zu begrenzen.