MongoDBでSQLのLIKE検索と同じことを実現する方法
MongoDBにおけるLIKE検索の基本
SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。
テスト用コレクションの作成
まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。
> db.demo686.insertOne({"FirstName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea55182a7e81adc6a0b395c")
}
> db.demo686.insertOne({"FirstName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea55186a7e81adc6a0b395d")
}
> db.demo686.insertOne({"FirstName":"ROBERT"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea5518fa7e81adc6a0b395e")
}
> db.demo686.insertOne({"FirstName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea55195a7e81adc6a0b395f")
}
> db.demo686.insertOne({"FirstName":"robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea5519ba7e81adc6a0b3960")
}大文字・小文字が異なる「Robert」「ROBERT」「robert」、そして別の名前である「John」「David」を意図的に登録している点に注目してください。後ほど、大文字小文字を区別しない検索結果を確認する際に役立ちます。
登録したドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo686.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5ea55182a7e81adc6a0b395c"), "FirstName" : "Robert" }
{ "_id" : ObjectId("5ea55186a7e81adc6a0b395d"), "FirstName" : "John" }
{ "_id" : ObjectId("5ea5518fa7e81adc6a0b395e"), "FirstName" : "ROBERT" }
{ "_id" : ObjectId("5ea55195a7e81adc6a0b395f"), "FirstName" : "David" }
{ "_id" : ObjectId("5ea5519ba7e81adc6a0b3960"), "FirstName" : "robert" }LIKE検索に相当するクエリの実行
それでは本題です。「LIKE '%Robert%'」のような部分一致検索は、次のように正規表現を使って記述します。
> db.demo686.find({FirstName:/Robert/i});ここでのポイントは2つあります。
- /Robert/ … 「Robert」という文字列を含むドキュメントを対象とします(部分一致)。
- i フラグ … 大文字・小文字を区別せずにマッチングを行います。
このクエリを実行すると、以下の結果が出力されます。
{ "_id" : ObjectId("5ea55182a7e81adc6a0b395c"), "FirstName" : "Robert" }
{ "_id" : ObjectId("5ea5518fa7e81adc6a0b395e"), "FirstName" : "ROBERT" }
{ "_id" : ObjectId("5ea5519ba7e81adc6a0b3960"), "FirstName" : "robert" }ご覧のとおり、「Robert」「ROBERT」「robert」の3件だけが取得され、「John」や「David」は除外されました。これにより、SQLのLIKE検索と同等の動作がMongoDBでも簡単に実現できることがわかります。
応用的な正規表現パターン
正規表現を工夫することで、より柔軟な検索も可能です。
- 前方一致:
{ FirstName: /^Robert/ }— 「Robert」で始まる文字列にマッチ - 後方一致:
{ FirstName: /bert$/ }— 「bert」で終わる文字列にマッチ - 完全一致:
{ FirstName: /^Robert$/i }— 大文字小文字を無視して「Robert」そのものにマッチ
用途に応じてこれらのパターンを使い分けることで、SQL以上に細かい条件指定も行えます。
まとめ
MongoDBでLIKE検索を実現するには、find() に対象フィールドと正規表現を渡すだけでOKです。i フラグを付ければ大文字・小文字を区別しない検索も可能になります。インデックスを活用すれば大量データでも高速に検索できるため、実務でもぜひ活用してみてください。
-
MongoDBのサブドキュメントを検索する方法:ドット表記を使ったクエリ実行手順を解説
MongoDBでは、ネストされたサブドキュメント(埋め込みドキュメント)を検索する際に、ドット表記(dot notation)を使用します。フィールド名とサブフィールド名をドット(.)でつなぐことで、階層構造を持つデータにも簡単にアクセスできます。この記事では、実際にコレクションを作成し、サブドキュメントに対してクエリを実行するまでの手順をサンプルコード付きで解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、サブドキュメントを含むドキュメントをコレクションに挿入します。> db.demo537.insertOne({details:{S
-
MySQLのORDER BYでLIKE条件を使って並び替える方法
MySQLでは、ORDER BY句の中でCASE式とLIKE演算子を組み合わせることで、特定のパターンに一致する行を優先的に並び替えることができます。通常のORDER BYはカラムの値を基準にソートしますが、この手法を使えば「文字列の一部が一致するかどうか」という柔軟な条件でのソートが可能になります。本記事では、具体的な構文と実行例を通じて、その使い方をわかりやすく解説します。 基本構文 LIKE条件に基づいて並び替えるには、ORDER BY句の中でCASE式を使用します。基本構文は以下の通りです。 SELECT *FROM yourTableName &n