MongoDBの正規表現
正規表現構文規則の一致文字列の系列に沿って、単一の文字列の使用を記載するために使用されます。
多くのプログラミング言語は、文字列操作のための正規表現の使用をサポートしています。
MongoDBは正規表現にマッチした文字列を設定するには、$の正規表現演算子を使用しています。
MongoDBは、正規表現言語としてPCRE(Perl互換正規表現)を使用します。
フルテキスト検索とは異なり、我々は任意の構成を行う必要はありません正規表現を使用しています。
記事の以下の文書構造のセットを考えてみましょう、文書は記事とラベルの内容が含まれています。
{ "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] }
正規表現を使用して、
次のコマンドは、記事を見つけるために正規表現を使用w3cschool.cc文字列が含まれています
>db.posts.find({post_text:{$regex:"w3cschool.cc"}})
上記のクエリは次のように書くこともできます。
>db.posts.find({post_text:/w3cschool.cc/})
大文字と小文字を区別しない正規表現
あなたは、大文字と小文字を区別しないを取得する必要がある場合、我々は$ iと$のオプションを設定することができます。
次のコマンドは、大文字と小文字を区別しない文字列w3cschool.ccを見つけます:
>db.posts.find({post_text:{$regex:"w3cschool.cc",$options:"$i"}})
コレクションでは、大文字と小文字は区別されていないw3cschool.cc文字列を含むすべてのデータを返します。
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on W3Cschool.cc", "tags" : [ "tutorialspoint" ] }
正規表現を使用して配列要素
また、コンテンツを見つけるために、配列フィールドで正規表現を使用することができます。 これは、ラベルが先頭にデータ(チュートリアルやチュートリアルやtutorialpointまたはtutorialphp)チュートリアルが含まれて見つける必要がある場合は、次のコードを使用することができ、ラベルの実現に有用です:
>db.posts.find({tags:{$regex:"tutorial"}})
正規表現のクエリの最適化
- ドキュメントインデックスフィールドが設定されている場合は、インデックスの使用は、より速い問い合わせすべてのデータを検索するために正規表現マッチングと比較します。
- 正規表現は接頭式である場合は、一致するすべてのデータが開始する接頭辞文字列を指定します。 たとえば、次の正規表現は^ちぇある場合は、ツタンカーメンのクエリは、文字列の先頭になります。
正規表現の使用には注意すべき2つの点がありますがあります。
変数を使用して正規表現。 直接文字列の連結式に渡すことはできません後に変換する文字列のevalの組み合わせを使用してください。 そうでなければそこには、エラーメッセージはありませんが、結果は空です! 例としては、次のとおりです:
var name=eval("/" + 变量值key +"/i");
以下は、あいまいクエリがタイトルキーワードは大文字と小文字を区別しません含まれています:
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}