MongoDB-正規表現

正規表現は、任意の文字列内のパターンまたは単語を検索するために、すべての言語で頻繁に使用されます。MongoDBは、を使用した文字列パターンマッチングのための正規表現の機能も提供します。$regexオペレーター。MongoDBは、正規表現言語としてPCRE(Perl互換正規表現)を使用します。

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

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

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

正規表現の使用

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

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

同じクエリを次のように記述することもできます-

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

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

大文字と小文字を区別しないようにするために、 $options 値を持つパラメータ $i。次のコマンドは、次の単語を含む文字列を検索しますtutorialspoint、小さい場合や大文字の場合に関係なく-

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

このクエリから返される結果の1つは、次の単語を含むドキュメントです。 tutorialspoint さまざまな場合-

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

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

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

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

正規表現クエリの最適化

  • ドキュメントフィールドが indexed、クエリは、正規表現に一致するようにインデックス値を使用します。これにより、コレクション全体をスキャンする正規表現と比較して、検索が非常に高速になります。

  • 正規表現が prefix expression、すべての一致は、特定の文字列文字で始まることを意図しています。たとえば、正規表現が^tut、次に、クエリはで始まる文字列のみを検索する必要があります tut