MongoDB - Regulärer Ausdruck
Reguläre Ausdrücke werden häufig in allen Sprachen verwendet, um nach einem Muster oder Wort in einer beliebigen Zeichenfolge zu suchen. MongoDB bietet auch Funktionen für reguläre Ausdrücke für den String-Mustervergleich mit$regexOperator. MongoDB verwendet PCRE (Perl Compatible Regular Expression) als Sprache für reguläre Ausdrücke.
Im Gegensatz zur Textsuche müssen wir keine Konfiguration oder Befehle ausführen, um reguläre Ausdrücke zu verwenden.
Angenommen, wir haben ein Dokument in eine Datenbank mit dem Namen eingefügt posts wie unten gezeigt -
> db.posts.insert(
{
"post_text": "enjoy the mongodb articles on tutorialspoint",
"tags": [
"mongodb",
"tutorialspoint"
]
}
WriteResult({ "nInserted" : 1 })
Regex-Ausdruck verwenden
Die folgende Regex-Abfrage sucht nach allen Posts, die Zeichenfolgen enthalten tutorialspoint darin -
> 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"
]
}
>
Die gleiche Abfrage kann auch geschrieben werden als -
>db.posts.find({post_text:/tutorialspoint/})
Verwenden des regulären Ausdrucks mit Groß- und Kleinschreibung wird nicht berücksichtigt
Um die Groß- und Kleinschreibung nicht zu berücksichtigen, verwenden wir die $options Parameter mit Wert $i. Der folgende Befehl sucht nach Zeichenfolgen mit dem Worttutorialspoint, unabhängig von kleineren oder Kapitalfall -
>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})
Eines der Ergebnisse dieser Abfrage ist das folgende Dokument, das das Wort enthält tutorialspoint in verschiedenen Fällen -
{
"_id" : ObjectId("53493d37d852429c10000004"),
"post_text" : "hey! this is my post on TutorialsPoint",
"tags" : [ "tutorialspoint" ]
}
Verwenden von Regex für Array-Elemente
Wir können auch das Konzept der Regex im Array-Feld verwenden. Dies ist besonders wichtig, wenn wir die Funktionalität von Tags implementieren. Wenn Sie also nach allen Posts suchen möchten, deren Tags mit dem Wort "Tutorial" beginnen (entweder Tutorial oder Tutorials oder Tutorialpoint oder Tutorialphp), können Sie den folgenden Code verwenden:
>db.posts.find({tags:{$regex:"tutorial"}})
Abfragen von regulären Ausdrücken optimieren
Wenn die Dokumentfelder sind indexedBei der Abfrage werden indizierte Werte verwendet, um mit dem regulären Ausdruck übereinzustimmen. Dies macht die Suche im Vergleich zum Scannen der gesamten Sammlung durch reguläre Ausdrücke sehr schnell.
Wenn der reguläre Ausdruck a ist prefix expressionAlle Übereinstimmungen sollen mit bestimmten Zeichenfolgen beginnen. Zum Beispiel, wenn der Regex-Ausdruck ist^tutDann muss die Abfrage nur nach den Zeichenfolgen suchen, die mit beginnen tut.