English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
正規表現は、すべての言語で文字列内のパターンや単語を検索するためによく使用されます。MongoDBは、$regex演算子を提供して、文字列パターンに正規表現機能を追加します。MongoDBは、PCRE(Perl互換正規表現)を使用して正規表現言語を定義しています。
テキスト検索とは異なり、正規表現を使用するには何も設定やコマンドを行う必要はありません
例えば、以下の名前の posts のデータベースにドキュメントが1件挿入されました。以下のようになります
> db.posts.insert( { "post_text": "enjoy the mongodb articles on w3codebox", "tags": [ "mongodb", "w3codebox" ] codebox" ] WriteResult({ "nInserted": 1 })
以下のregexクエリは文字列wを含むを検索します3codeboxのすべての投稿–
> db.posts.find({post_text:{$regex:"w3codebox"}}).pretty(){ "_id": ObjectId("5dd7ce28f1dd4583e7103fe0"), "post_text": "enjoy the mongodb articles on w3codebox", "tags": [ "mongodb", "w3codebox" ] codebox" ] { "_id": ObjectId("5dd7d111f1dd4583e7103fe2)、 "post_text": "enjoy the mongodb articles on w3codebox", "tags": [ "mongodb", "w3codebox" ] codebox" ] >
同じクエリは以下のように書かれることもできます-
>db.posts.find({post_text:/w3codebox/})
大文字小文字を区別しない検索を行うために、$options
valueのパラメータ$i
以下のコマンドは、単語を含む文字列を検索しますw3codebox
、大小文字や小文字を区別しない-
>db.posts.find({post_text:{$regex:"w3codebox", $options:"$i"}})
このクエリの返される結果の1つは以下のドキュメントで、以下を含んでいますw3codebox
様々な状況での単語-
{ "_id": ObjectId("53493d37d852429c10000004)、 "post_text": "hey! this is my post on w3codebox", codebox",3"tags" : [ "w codebox" ]
配列要素に正規表現を使用-
、それでは配列フィールド上に正規表現の概念を使用できます。タグ機能を実装する際に特に重要です。したがって、タグを持つすべての単語が tutorial(教程またはtutorialpointまたはtutorialphp)で始まる単語を検索する場合、以下のコードを使用できます
正規表現クエリを最適化、それではドキュメントのフィールドが
インデックス化
、それではクエリはインデックス値を使用して正規表現をマッチングします。正規表現スキャン全体と比較して、これにより検索が非常に高速になります。プレフィックス表現
、それではすべてのマッチングアイテムはある文字列文字で始まるべきです。例えば、regex表現が^tut
、それではクエリは最初に指定された文字列で検索する必要がありますtut
。