MongoDBで「LIKE」検索を実行する方法:正規表現を使った部分一致クエリの基本
MongoDBでは、SQLの「LIKE」句のような部分一致検索を、正規表現(RegExp)を使って簡単に実現できます。この記事では、基本構文から実際の実行例まで、サンプルコード付きでわかりやすく解説します。
基本構文
フィールドの値に対して部分一致検索を行う場合は、スラッシュ(/)で囲んだ正規表現を find() メソッドに指定します。
db.yourCollectionName.find({ "yourFieldName": /.*yourMatchingValue.*/ }).pretty();
/.*yourMatchingValue.*/ は「指定した値が文字列のどこかに含まれていればマッチする」というパターンです。.* は「任意の文字が0回以上続く」ことを意味するため、検索対象の値の前後にどのような文字があってもヒットします。
サンプルコレクションの作成
構文の動きを確認するために、「employee」という名前のコレクションを作成し、ドキュメントをいくつか挿入してみましょう。クエリは以下の通りです。
> db.employee.insert({"EmployeeName":"John","EmployeeSalary":450000});
WriteResult({ "nInserted" : 1 })
> db.employee.insert({"EmployeeName":"Carol","EmployeeSalary":150000});
WriteResult({ "nInserted" : 1 })
> db.employee.insert({"EmployeeName":"James","EmployeeSalary":550000});
WriteResult({ "nInserted" : 1 })
> db.employee.insert({"EmployeeName":"Jace","EmployeeSalary":670000});
WriteResult({ "nInserted" : 1 })
> db.employee.insert({"EmployeeName":"Larry","EmployeeSalary":1000000});
WriteResult({ "nInserted" : 1 })
登録済みドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。クエリは以下の通りです。
> db.employee.find().pretty();
実行結果は以下のようになります。
{
"_id" : ObjectId("5c6c0b2e68174aae23f5ef59"),
"EmployeeName" : "John",
"EmployeeSalary" : 450000
}
{
"_id" : ObjectId("5c6c0b3b68174aae23f5ef5a"),
"EmployeeName" : "Carol",
"EmployeeSalary" : 150000
}
{
"_id" : ObjectId("5c6c0b4768174aae23f5ef5b"),
"EmployeeName" : "James",
"EmployeeSalary" : 550000
}
{
"_id" : ObjectId("5c6c0b8f68174aae23f5ef5c"),
"EmployeeName" : "Jace",
"EmployeeSalary" : 670000
}
{
"_id" : ObjectId("5c6c0b9e68174aae23f5ef5d"),
"EmployeeName" : "Larry",
"EmployeeSalary" : 1000000
}
「LIKE」検索の実行例
それでは、LIKE相当の検索を実際に実行してみましょう。ここでは、EmployeeName フィールドに「J」が含まれるドキュメントを検索します。
> db.employee.find({"EmployeeName":/.*J.*/}).pretty();
実行結果:
{
"_id" : ObjectId("5c6c0b2e68174aae23f5ef59"),
"EmployeeName" : "John",
"EmployeeSalary" : 450000
}
{
"_id" : ObjectId("5c6c0b4768174aae23f5ef5b"),
"EmployeeName" : "James",
"EmployeeSalary" : 550000
}
{
"_id" : ObjectId("5c6c0b8f68174aae23f5ef5c"),
"EmployeeName" : "Jace",
"EmployeeSalary" : 670000
}
「J」を含む「John」「James」「Jace」の3件のみが取得され、「Carol」や「Larry」は除外されていることがわかります。
補足:$regex演算子と検索オプションの活用
同じ検索は $regex 演算子を使っても記述できます。また、オプション「i」を付けると大文字・小文字を区別せずに検索できます。
// $regex 演算子を使用する書き方
db.employee.find({ "EmployeeName": { $regex: "J" } }).pretty();
// 大文字・小文字を区別しない検索
db.employee.find({ "EmployeeName": /j/i }).pretty();
さらに、前方一致だけなら /^J/、後方一致なら /n$/ のようにパターンを調整することで、SQLの「J%」や「%n」相当の検索も柔軟に実現できます。
まとめ
MongoDBでSQLのLIKEのような部分一致検索を行いたい場合は、find() メソッドに正規表現を渡すだけでOKです。パターンの書き方を変えることで前方一致・後方一致・部分一致を使い分けられ、$regex 演算子やオプションを組み合わせればより柔軟な文字列検索が可能になります。
-
MongoDBでSQLのLIKE検索と同じことを実現する方法
MongoDBにおけるLIKE検索の基本SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。テスト用コレクションの作成まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。> db.demo686.insertOne({FirstName:Robert});{ &nb
-
MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)
MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って