MongoDB チュートリアルlogin
MongoDB チュートリアル
著者:php.cn  更新時間:2022-04-21 17:49:03

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 で始まる文字列を検索します。

ここで正規表現を使用する場合、次の 2 つの点に注意してください:

正規表現で変数を使用します。結合された文字列を変換するには必ず eval を使用してください。文字列を直接連結して式に渡すことはできません。それ以外の場合、エラー メッセージは報告されませんが、結果は空になります。例は次のとおりです:

>db.posts.find({tags:{$regex:"tutorial"}})

以下は、title キーワードを含み、大文字と小文字が区別されないファジー クエリです:

var name=eval("/" + 变量值key +"/i");