MongoDB の正規表現
正規表現は、単一の文字列を使用して、特定の構文規則に一致する一連の文字列を記述および照合します。
多くのプログラミング言語は、正規表現を使用した文字列操作をサポートしています。
MongoDB は、$regex 演算子を使用して、文字列に一致する正規表現を設定します。
MongoDB は正規表現言語として PCRE (Perl 互換正規表現) を使用します。
全文検索とは異なり、正規表現を使用する場合は設定を行う必要はありません。
記事のコンテンツとタグが含まれる次の posts コレクションのドキュメント構造を検討してください。
{ "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] }
正規表現の使用
次のコマンドは、正規表現を使用して、w3cschool.cc 文字列を含む記事を検索します。上記のクエリは次のように記述することもできます:
>db.posts.find({post_text:{$regex:"w3cschool.cc"}})大文字と小文字を区別しない正規表現
検索で大文字と小文字を区別する必要がある場合は、$options を $i に設定できます。
次のコマンドは、大文字と小文字を区別しない文字列 w3cschool.cc を検索します:
>db.posts.find({post_text:/w3cschool.cc/})
文字列 w3cschool.cc を含むすべてのデータはコレクションに返され、大文字と小文字は区別されません:
>db.posts.find({post_text:{$regex:"w3cschool.cc",$options:"$i"}})配列要素は正規表現を使用します
配列フィールドで正規表現を使用してコンテンツを検索することもできます。 これは、チュートリアル (tutorial、tutorial、tutorialpoint、またはtutorialphp) で始まるタグ データを検索する必要がある場合に、タグの実装で非常に役立ちます。 次のコードを使用できます:
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on W3Cschool.cc", "tags" : [ "tutorialspoint" ] }正規表現クエリを最適化する
- ドキュメント内のフィールドにインデックスが付けられている場合、インデックスを使用してすべてのデータを検索する方が、正規表現の一致よりも高速になります。
- ^tut
の場合、クエリ ステートメントは tut で始まる文字列を検索します。
正規表現で変数を使用します。結合された文字列を変換するには必ず eval を使用してください。文字列を直接連結して式に渡すことはできません。それ以外の場合、エラー メッセージは報告されませんが、結果は空になります。例は次のとおりです:
>db.posts.find({tags:{$regex:"tutorial"}})
以下は、title キーワードを含み、大文字と小文字が区別されないファジー クエリです:
var name=eval("/" + 变量值key +"/i");