MongoDB Reguläre Ausdrücke
Ein regulärer Ausdruck ist eine einzelne Zeichenkette, die verwendet wird, um eine Reihe von Zeichenketten zu beschreiben und abzugleichen, die einer bestimmten syntaktischen Regel entsprechen.
Viele Programmiersprachen unterstützen Zeichenkettenoperationen unter Verwendung regulärer Ausdrücke.
MongoDB verwendet den$regexOperator, um den regulären Ausdruck für den Abgleich von Zeichenketten festzulegen.
MongoDB verwendet PCRE (Perl Compatible Regular Expression) als Sprache für reguläre Ausdrücke.
Im Gegensatz zur Volltextsuche erfordert die Verwendung regulärer Ausdrücke keine Konfiguration.
Betrachten Sie die folgendepostsDokumentstruktur der Sammlung, die den Artikelinhalt und Tags enthält:
{
"post_text": "enjoy the mongodb articles on example",
"tags": [
"mongodb",
"example"
]
}
Verwendung regulärer Ausdrücke
Der folgende Befehl verwendet einen regulären Ausdruck, um Artikel zu finden, die die Zeichenfolge example enthalten:
>db.posts.find({post_text:{$regex:"example"}})
Die obige Abfrage kann auch wie folgt geschrieben werden:
>db.posts.find({post_text:/example/})
Reguläre Ausdrücke ohne Beachtung der Groß-/Kleinschreibung
Wenn die Suche unabhängig von Groß-/Kleinschreibung sein soll, können wir $options auf $i setzen.
Der folgende Befehl findet die Zeichenfolge example ohne Berücksichtigung der Groß-/Kleinschreibung:
>db.posts.find({post_text:{$regex:"example",$options:"$i"}})
Die Sammlung gibt alle Daten, die die Zeichenfolge example enthalten, ohne Berücksichtigung der Groß-/Kleinschreibung zurück:
{
"_id" : ObjectId("53493d37d852429c10000004"),
"post_text" : "hey! this is my post on example",
"tags" : [ "example" ]
}
Verwendung regulärer Ausdrücke für Array-Elemente
Wir können reguläre Ausdrücke auch in Array-Feldern verwenden, um nach Inhalten zu suchen. Dies ist bei der Implementierung von Tags sehr nützlich. Wenn Sie Tag-Daten finden müssen, die mit run beginnen (ru oder run oder example), können Sie den folgenden Code verwenden:
>db.posts.find({tags:{$regex:"run"}})
Optimierung von Abfragen mit regulären Ausdrücken
- Wenn ein Index für ein Feld in Ihren Dokumenten eingerichtet ist, ist die Verwendung des Index schneller als die Verwendung eines regulären Ausdrucks, um alle Daten abzugleichen und zu finden.
- Wenn der reguläre Ausdruck ein Präfixausdruck ist, beginnen alle übereinstimmenden Daten mit der angegebenen Präfixzeichenfolge. Zum Beispiel: Wenn der reguläre Ausdruck ^tut ist, sucht die Abfrage nach Zeichenfolgen, die mit tut beginnen.
Hierbei sind zwei Punkte bei der Verwendung regulärer Ausdrücke zu beachten:
Verwenden von Variablen in regulären Ausdrücken. Stellen Sie sicher, dass Sie eval verwenden, um die verkettete Zeichenfolge umzuwandeln; Sie können die verkettete Zeichenfolge nicht direkt an den Ausdruck übergeben. Andernfalls gibt es keine Fehlermeldung, nur ein leeres Ergebnis! Beispiel unten:
var name=eval("/" + 变量值key +"/i");
Das Folgende ist eine unscharfe Abfrage, die das Titelschlüsselwort enthält und die Groß-/Kleinschreibung nicht berücksichtigt:
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}
Andere Erweiterungen