MongoDBでSQLのLIKE検索のように一致するレコードを取得する方法
MongoDBには、SQLのLIKE句に直接相当する演算子は用意されていません。しかし、正規表現(RegExp)を使用することで、LIKEと同じような部分一致検索を簡単に実現できます。この記事では、実際のコード例を通じてその方法を解説します。
1. サンプルコレクションの作成
まず、検索対象となるドキュメントを含むコレクションを作成します。insertOne()メソッドを使って、複数のドキュメントを登録していきましょう。
> db.likeDemo.insertOne({"Name":"John",Age:32});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb84984623186894665ae41")
}
> db.likeDemo.insertOne({"Name":"Chris",Age:25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb84991623186894665ae42")
}
> db.likeDemo.insertOne({"Name":"Carol",Age:22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb849a1623186894665ae43")
}
> db.likeDemo.insertOne({"Name":"Johnny",Age:22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb849b2623186894665ae44")
}
> db.likeDemo.insertOne({"Name":"James",Age:27});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb849bb623186894665ae45")
}2. 登録した全ドキュメントの確認
find()メソッドにpretty()を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.likeDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cb84984623186894665ae41"),
"Name" : "John",
"Age" : 32
}
{
"_id" : ObjectId("5cb84991623186894665ae42"),
"Name" : "Chris",
"Age" : 25
}
{
"_id" : ObjectId("5cb849a1623186894665ae43"),
"Name" : "Carol",
"Age" : 22
}
{
"_id" : ObjectId("5cb849b2623186894665ae44"),
"Name" : "Johnny",
"Age" : 22
}
{
"_id" : ObjectId("5cb849bb623186894665ae45"),
"Name" : "James",
"Age" : 27
}3. 正規表現で「Jo」から始まる名前を検索する
SQLでいうWHERE Name LIKE 'Jo%'に相当する検索は、MongoDBでは次のように正規表現で記述します。パターンの先頭に^を付けることで「〜で始まる」という条件になります。また、末尾のiフラグを指定すると、大文字・小文字を区別せずに検索できます。
> db.likeDemo.find({Name: /^Jo/i } ).pretty();このクエリを実行すると、名前が「Jo」で始まるドキュメントのみが抽出されます。
{
"_id" : ObjectId("5cb84984623186894665ae41"),
"Name" : "John",
"Age" : 32
}
{
"_id" : ObjectId("5cb849b2623186894665ae44"),
"Name" : "Johnny",
"Age" : 22
}応用:さまざまなLIKEパターンへの対応
正規表現の書き方を変えることで、SQLのLIKEの各パターンを再現できます。
- 前方一致(
LIKE 'Jo%'):{ Name: /^Jo/ } - 後方一致(
LIKE '%hn'):{ Name: /hn$/ } - 部分一致(
LIKE '%oh%'):{ Name: /oh/ }
このように、MongoDBでは正規表現を活用することで、SQLのLIKE検索と同等以上の柔軟な文字列検索が可能になります。
-
MongoDBでサーバーレコードを含むコレクションのステータスを非アクティブに更新する方法
MongoDBでサーバーのステータスを非アクティブに更新する方法サーバーレコードを含むMongoDBコレクションでは、配列形式で保存されたサーバー情報の中から特定のサーバーだけを探し出し、そのステータスを「Active(アクティブ)」から「Inactive(非アクティブ)」へ変更したいケースがあります。この記事では、位置指定演算子「$」を使って、配列内の条件に一致した要素だけを効率的に更新する手順を解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、サーバー情報(serverInformation)を配列として持つドキュメントを挿入し、コレクシ
-
MongoDBで生年月日を年齢に変換する方法
MongoDBでは、集計パイプライン(aggregate)を活用することで、保存されている生年月日(DateOfBirth)のデータから現在の年齢を簡単に算出できます。この記事では、実際のコード例を使いながらその手順をわかりやすく解説します。1. コレクションにドキュメントを挿入するまずは、生年月日を含むドキュメントを持つコレクションを作成します。以下のように insertOne() メソッドを使用します。> db.demo754.insertOne({DateOfBirth:new Date(2000-05-03)}); { acknowledged : true, ins