MongoDBでSQLのLIKE操作と同様の検索を実行する方法
SQLで使われる「LIKE」句のような部分一致検索をMongoDBで実現したい場合、正規表現(/検索文字列/)を使用します。本記事では、実際にコレクションを作成し、正規表現によるあいまい検索の手順を具体的なコード例とともに解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。ここでは「demo26」というコレクションに、学生名(StudentName)を格納した4件のドキュメントを挿入します。
> db.demo26.insertOne({"StudentName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e14c9dc22d07d3b95082e79")
}
> db.demo26.insertOne({"StudentName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e14c9e022d07d3b95082e7a")
}
> db.demo26.insertOne({"StudentName":"Jones"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e14ca7222d07d3b95082e7b")
}
> db.demo26.insertOne({"StudentName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e14ca7622d07d3b95082e7c")
}
2. find()メソッドですべてのドキュメントを表示
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo26.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e14c9dc22d07d3b95082e79"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e14c9e022d07d3b95082e7a"), "StudentName" : "John" }
{ "_id" : ObjectId("5e14ca7222d07d3b95082e7b"), "StudentName" : "Jones" }
{ "_id" : ObjectId("5e14ca7622d07d3b95082e7c"), "StudentName" : "David" }
3. LIKE相当の検索を正規表現で実行する
MongoDBで「LIKE」ステートメントと同様の操作を行うには、検索条件に正規表現を指定します。以下の例では、/Jo/というパターンを使い、「Jo」を含む名前を検索しています。
> db.demo26.find({"StudentName":/Jo/});
このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e14c9e022d07d3b95082e7a"), "StudentName" : "John" }
{ "_id" : ObjectId("5e14ca7222d07d3b95082e7b"), "StudentName" : "Jones" }
補足:正規表現の応用テクニック
正規表現を活用すると、より柔軟な検索が可能になります。
- 前方一致検索:
/^Jo/のように「^」を付けると、文字列の先頭が「Jo」で始まるドキュメントのみを取得できます(SQLのLIKE 'Jo%'に相当)。 - 後方一致検索:
/es$/のように「$」を付けると、末尾が「es」で終わるドキュメントを取得できます(SQLのLIKE '%es'に相当)。 - 大文字小文字を区別しない検索:
/jo/iのように「i」オプションを指定すると、大文字・小文字を区別せずに検索できます。
このように、MongoDBでは正規表現を使うことで、SQLのLIKE句と同等以上の柔軟な文字列検索を実現できます。
-
MongoDBでMySQLのUNIONに似たクエリを実装する方法
MySQLのUNIONに相当するクエリをMongoDBで実現したい場合は、aggregate()と$lookup(JOIN)を組み合わせることで実装できます。この記事では、2つのコレクションを結合して集計する具体的な手順を、サンプルコードとともに解説します。最初のコレクション(demo486)を作成するまず、ドキュメントを含むコレクションを作成します。> db.demo486.insertOne({_id:1,Amount:30,No:4}); { acknowledged : true, insertedId : 1 } > db.demo486.insertOne({_id:2
-
MongoDBでSQLのLIKE検索と同じことを実現する方法
MongoDBにおけるLIKE検索の基本SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。テスト用コレクションの作成まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。> db.demo686.insertOne({FirstName:Robert});{ &nb