Mongodb-regular-expression

提供:Dev Guides
移動先:案内検索

MongoDB-正規表現

正規表現は、すべての言語で頻繁に使用され、任意の文字列のパターンまたは単語を検索します。 MongoDBは、 $ regex 演算子を使用した文字列パターンマッチングの正規表現機能も提供します。 MongoDBは、PCRE(Perl Compatible Regular Expression)を正規表現言語として使用します。

テキスト検索とは異なり、正規表現を使用するために設定やコマンドを実行する必要はありません。

以下に示すように、 posts という名前のデータベースにドキュメントを挿入したと仮定します-

> db.posts.insert(
{
   "post_text": "enjoy the mongodb articles on finddevguides",
   "tags": [
      "mongodb",
      "finddevguides"
   ]
}
WriteResult({ "nInserted" : 1 })

正規表現を使用する

次の正規表現クエリは、文字列 finddevguides を含むすべての投稿を検索します-

> db.posts.find({post_text:{$regex:"finddevguides"}}).pretty()
{
    "_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
    "post_text" : "enjoy the mongodb articles on finddevguides",
    "tags" : [
        "mongodb",
        "finddevguides"
    ]
}
{
    "_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
    "post_text" : "enjoy the mongodb articles on finddevguides",
    "tags" : [
        "mongodb",
        "finddevguides"
    ]
}
>

同じクエリは次のように書くこともできます-

>db.posts.find({post_text:/finddevguides/})

大文字と小文字を区別しないで正規表現を使用する

検索で大文字と小文字を区別しないようにするには、 $ options パラメーターと値 $ i を使用します。 次のコマンドは、大文字か小文字かに関係なく、 finddevguides という単語を含む文字列を検索します-

>db.posts.find({post_text:{$regex:"finddevguides",$options:"$i"}})

このクエリから返される結果の1つは、次のドキュメントで、さまざまなケースで finddevguides という単語が含まれています-

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on finddevguides",
   "tags" : [ "finddevguides" ]
}

配列要素に正規表現を使用する

配列フィールドで正規表現の概念を使用することもできます。 これは、タグの機能を実装するときに特に重要です。 したがって、単語tutorial(tutorialまたはtutorialsまたはtutorialpointまたはtutorialphpのいずれか)で始まるタグを持つすべての投稿を検索する場合は、次のコードを使用できます-

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

正規表現クエリの最適化

  • ドキュメントフィールドが*インデックス付き*の場合、クエリはインデックス付きの値を使用して正規表現と一致します。 これにより、コレクション全体をスキャンする正規表現と比較して、検索が非常に高速になります。
  • 正規表現が prefix expression である場合、すべての一致は特定の文字列文字で始まることを意味します。 たとえば、正規表現が ^ tut の場合、クエリは tut で始まる文字列のみを検索する必要があります。