MongoDBでMySQLのLIKE句を実現するには?$regex演算子の使い方を解説
MongoDBでMySQLのLIKEステートメントと同等の部分一致検索を実現するには、$regex(正規表現)演算子を使用します。この記事では、実際にサンプルコレクションを作成しながら、$regexを使ってLIKE検索と同じ結果を取得する手順を詳しく解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使ってドキュメントを含むコレクションを作成しましょう。ここでは「likeInMongoDBDemo」というコレクションに5つのドキュメントを挿入します。
> db.likeInMongoDBDemo.insertOne({"Name" : "Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6922857806ebf1256f123")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "John" });
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6923157806ebf1256f124")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "Scott"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6924557806ebf1256f125")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "Sean"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6924f57806ebf1256f126")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "Samuel"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6925857806ebf1256f127")
}
登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。整形して読みやすく表示するにはpretty()を付け加えます。
> db.likeInMongoDBDemo.find().pretty();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5cd6922857806ebf1256f123"), "Name" : "Sam" }
{ "_id" : ObjectId("5cd6923157806ebf1256f124"), "Name" : "John" }
{ "_id" : ObjectId("5cd6924557806ebf1256f125"), "Name" : "Scott" }
{ "_id" : ObjectId("5cd6924f57806ebf1256f126"), "Name" : "Sean" }
{ "_id" : ObjectId("5cd6925857806ebf1256f127"), "Name" : "Samuel" }
$regexでLIKE検索を実行する
それが本題です。MySQLのLIKE '%Sam%'に相当する部分一致検索は、次のように$regex演算子を使って実現できます。
> db.likeInMongoDBDemo.find({"Name":{$regex:"Sam"}});
このクエリを実行すると、「Sam」を含むすべてのドキュメントが返されます。
{ "_id" : ObjectId("5cd6922857806ebf1256f123"), "Name" : "Sam" }
{ "_id" : ObjectId("5cd6925857806ebf1256f127"), "Name" : "Samuel" }
出力結果を見ると、完全一致の「Sam」と部分一致の「Samuel」の2件がヒットしていることがわかります。これはまさにMySQLのLIKE '%Sam%'と同じ動作です。
応用:前方一致・後方一致のパターン
$regexでは正規表現の記法をそのまま使えるため、LIKE句のさまざまなパターンに対応できます。
- 前方一致(
LIKE 'Sam%'相当):{ "Name": { $regex: /^Sam/ } } - 後方一致(
LIKE '%am'相当):{ "Name": { $regex: /am$/ } } - 大文字小文字を区別しない検索:
{ "Name": { $regex: /sam/i } }
このように、MongoDBでは$regexを活用することで、MySQLのLIKEステートメントと同等以上の柔軟な文字列検索を実装できます。ただし、大規模なコレクションに対する正規表現検索はインデックスを効率的に利用できない場合があるため、パフォーマンスが重要なケースでは前方一致(^から始まるパターン)を心がけるか、テキストインデックスの利用も検討しましょう。
-
MySQL Workbenchの列フラグ(PK・NN・AIなど)の意味を徹底解説
MySQL Workbenchでは、テーブルの列(カラム)に対してさまざまな「列フラグ」を設定することで、データの整合性を保つことができます。テーブルデザイナーで各カラムのチェックボックスに表示されるこれらのフラグは、それぞれ以下のような意味を持っています。PK - Primary Key(主キー)NN - NOT NULL(NULL値不可)BIN - Binary(バイナリ)UN - Unsigned(符号なし)UQ - Unique(一意制約)ZF - Zero Filled(ゼロ埋め)G - Generated Column(生成列)AI - Auto Increment(自動採番)それ
-
オフィス スイートのあるべき姿
人気のあるプログラムのミニマルで子供向けの簡素化されたバージョンである傾向がある Web アプリと、おそらくスペクトルの遠端を表す、大規模に装飾された KDE 中心のオフィス スイートの間で、一般的なユーザーは、文書を書き、ものを提示するための最高のプログラム。しかし、お気に入りのソフトウェアを正しく選択することは、問題の始まりにすぎません。あなたが何を決定しようとも、いつもと同じように、混乱し、苛立たしく、非効率的なやり方で仕事をすることになります。 この記事では、物事がどのように見えるべきか、典型的なオフィススイートがどうあるべきか、どうあるべきではないか、既知のプログラムの武器を調べ