MongoDBの正規表現($regex)を使って最初の5文字が大文字のレコードを表示する方法
MongoDBで先頭5文字が大文字のドキュメントを抽出するには
MongoDBでは、$regex 演算子と正規表現を組み合わせることで、特定のパターンに一致するレコードを簡単に検索できます。この記事では、「フィールド値の先頭5文字がすべて大文字であるレコード」を抽出する方法を、実際のコード例とともに解説します。
1. サンプルコレクションの作成
まずは insertOne() メソッドを使って、ドキュメントを含むコレクションを作成しましょう。ここでは学生の氏名を格納する StudentFullName フィールドを持つコレクションを用意します。
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"JOHN Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7edef1a844af18acdffb2")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"SAM Williams"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee011a844af18acdffb3")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"CAROL Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee101a844af18acdffb4")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"Bob Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee351a844af18acdffb5")
}
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"DAVID Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ee451a844af18acdffb6")
}上記のサンプルでは、大文字で始まる名前(JOHN、SAM、CAROL、DAVID)と、そうでない名前(Bob)を混在させて登録しています。
2. 登録された全ドキュメントの確認
find() メソッドに pretty() を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.upperCaseFiveLetterDemo.find().pretty();
実行結果は以下の通りです。
{
"_id" : ObjectId("5cd7edef1a844af18acdffb2"),
"StudentFullName" : "JOHN Smith"
}
{
"_id" : ObjectId("5cd7ee011a844af18acdffb3"),
"StudentFullName" : "SAM Williams"
}
{
"_id" : ObjectId("5cd7ee101a844af18acdffb4"),
"StudentFullName" : "CAROL Taylor"
}
{
"_id" : ObjectId("5cd7ee351a844af18acdffb5"),
"StudentFullName" : "Bob Taylor"
}
{
"_id" : ObjectId("5cd7ee451a844af18acdffb6"),
"StudentFullName" : "DAVID Miller"
}3. 正規表現で該当レコード数をカウントする
先頭5文字がすべて大文字のレコード件数を取得するには、$regex 演算子でパターン /[A-Z]{5}/ を指定し、count() メソッドを呼び出します。[A-Z] は大文字アルファベット1文字を表し、{5} はそれが5回連続することを意味します。
> db.upperCaseFiveLetterDemo.find({StudentFullName : {$regex : /[A-Z]{5}/ } }).count();実行結果:
2
結果として「2」が返されました。つまり、先頭5文字が大文字のドキュメントは2件存在するということです。
4. 該当するドキュメントを表示する
それでは、条件に一致したドキュメントそのものを表示してみましょう。count() を外して find() だけを実行します。
> db.upperCaseFiveLetterDemo.find({StudentFullName : {$regex : /[A-Z]{5}/ } });実行結果:
{ "_id" : ObjectId("5cd7ee101a844af18acdffb4"), "StudentFullName" : "CAROL Taylor" }
{ "_id" : ObjectId("5cd7ee451a844af18acdffb6"), "StudentFullName" : "DAVID Miller" }まとめ
CAROL Taylor と DAVID Miller の2件だけが抽出されました。JOHN Smith や SAM Williams は先頭4文字しか大文字ではないため除外され、Bob Taylor は2文字目以降が小文字のため対象外となったことが分かります。
このように、MongoDBでは $regex 演算子に正規表現パターンを渡すだけで、文字列の大文字・小文字といった細かい条件での絞り込みが可能です。なお、大量データを扱う場合は正規表現検索がインデックスを活用できないケースもあるため、パフォーマンス面にも留意しておくとよいでしょう。
-
MongoDBのタグレコードをすばやく更新する方法
はじめにMongoDBで配列内の特定の要素(タグなど)を更新したい場合、updateコマンドと位置演算子「$」を組み合わせるのが効果的です。本記事では、実際のコード例を通じて、タグレコードを効率よく更新する手順をわかりやすく解説します。サンプルコレクションの作成まず、タグ情報を配列として持つドキュメントを格納するコレクションを作成しましょう。insertOne()メソッドを使ってドキュメントを挿入します。> db.demo713.insertOne( ... { ... tags: ... &
-
MySQLでORDER BY DESCを使って降順ソートし、先頭の3件のレコードを表示する方法
データを降順(DESC)で並べ替えたうえで、先頭の数件だけを取得したいケースはよくあります。その場合は、ORDER BY ... DESCとLIMITを組み合わせることで簡単に実現できます。ここでは、具体的なサンプルを使って手順を解説します。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserName varchar(100) ); Query OK, 0 rows affected (0.5