MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで$regexを使った正規表現検索の方法をわかりやすく解説

MongoDBの$regex演算子とは

MongoDBでは、$regex演算子を使用することで、クエリ内で正規表現によるパターンマッチングを行えます。特定の文字列を含むドキュメントを検索したり、大文字・小文字を区別せずに検索したりする際に非常に便利です。

$regexの基本構文

MongoDBで$regexを使用する際の基本的な構文は以下のとおりです。

db.yourCollectionName.find({yourFieldName: { $regex: yourValue}});

フィールド名に対して$regexを指定し、マッチさせたいパターン(正規表現)を値として渡します。

サンプルコレクションの作成

まず、動作を確認するためにドキュメントを含むコレクションを作成しましょう。ここでは「UserName」というフィールドに、大文字・小文字が異なる同じ名前を持つ4つのドキュメントを挿入します。

> db.regularExpressionDemo.insertOne({"UserName":"John"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdffc25bf3115999ed51210")
}
> db.regularExpressionDemo.insertOne({"UserName":"JOHN"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdffc2ebf3115999ed51211")
}
> db.regularExpressionDemo.insertOne({"UserName":"john"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdffc35bf3115999ed51212")
}
> db.regularExpressionDemo.insertOne({"UserName":"JoHn"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdffc3ebf3115999ed51213")
}

find()メソッドですべてのドキュメントを表示

作成したコレクション内のすべてのドキュメントを、find()メソッドを使って表示してみます。

> db.regularExpressionDemo.find();

実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5cdffc25bf3115999ed51210"), "UserName" : "John" }
{ "_id" : ObjectId("5cdffc2ebf3115999ed51211"), "UserName" : "JOHN" }
{ "_id" : ObjectId("5cdffc35bf3115999ed51212"), "UserName" : "john" }
{ "_id" : ObjectId("5cdffc3ebf3115999ed51213"), "UserName" : "JoHn" }

$regexでパターンに一致するドキュメントを検索する

それでは、実際に$regexを使ってみましょう。次のクエリは、「UserName」フィールドが「JOHN」に一致するドキュメントを検索します。

> db.regularExpressionDemo.find({'UserName': { $regex: 'JOHN'}});

実行結果は以下のとおりです。

{ "_id" : ObjectId("5cdffc2ebf3115999ed51211"), "UserName" : "JOHN" }

このように、デフォルトでは大文字・小文字が区別されるため、「JOHN」と完全に一致する1件のみが返されました。「John」「john」「JoHn」はマッチしていません。

$options: 'i' で大文字・小文字を区別せずに検索する

大文字・小文字の違いを無視して、すべてのケースにマッチさせたい場合は、$optionsに「i」(case insensitivity:大文字小文字を区別しない)を指定します。

> db.regularExpressionDemo.find({'UserName': { $regex: 'JOHN', $options: 'i' }});

実行すると、以下のように4件すべてのドキュメントが取得できます。

{ "_id" : ObjectId("5cdffc25bf3115999ed51210"), "UserName" : "John" }
{ "_id" : ObjectId("5cdffc2ebf3115999ed51211"), "UserName" : "JOHN" }
{ "_id" : ObjectId("5cdffc35bf3115999ed51212"), "UserName" : "john" }
{ "_id" : ObjectId("5cdffc3ebf3115999ed51213"), "UserName" : "JoHn" }

まとめ

MongoDBの$regex演算子を使えば、柔軟な文字列パターン検索が可能になります。ポイントは以下の2つです。
・基本構文:{ フィールド名: { $regex: パターン } }
・大文字・小文字を区別しない検索には $options: 'i' を追加する
部分一致検索や前方一致・後方一致なども、正規表現のパターンを組み合わせることで自由に実現できるので、ぜひ活用してみてください。

  1. MongoDBで「NOT LIKE」を実現する方法|$not演算子と正規表現の使い方

    MongoDBには、SQLにあるような「NOT LIKE」演算子は用意されていません。しかし、$not演算子と正規表現を組み合わせることで、同じ条件指定を簡単に実現できます。この記事では、実際にコレクションを作成しながら、$not演算子の使い方を具体的に解説します。1. サンプルコレクションの作成まずは動作確認のためのコレクションを作成します。以下のクエリで、学生名(StudentName)を含むドキュメントを5件挿入します。> db.notLikeOperatorDemo.insertOne({StudentName:John Doe}); { acknowledged : tr

  2. MongoDBでコンソールをクリアする2つの方法|ショートカット「Ctrl + L」とコマンド「cls」の使い方

    MongoDBのシェル(mongo / mongosh)を使っていると、実行したクエリや結果がどんどん積み重なり、画面が見づらくなることがあります。そんなときに便利なのがコンソールのクリア機能です。MongoDBでは、以下の2つの方法でコンソールをクリアできます。 方法1:キーボードショートカット「Ctrl + L」を使う 最も手軽なのが、キーボードショートカットを使う方法です。次のキーを押すだけで、即座にコンソールをクリアできます。 Ctrl + L このキーを押すと、それまで表示されていたログや実行結果がすべて消え、まっさらな状態になります。Linuxのターミナルなどと同じ操作感なので、