MongoDBで「13」で始まるフィールド値を持つドキュメント数をカウントする方法
はじめに
MongoDBでコレクション内のドキュメント数を取得するには、count()メソッドを使用します。さらに、特定の文字列で始まるフィールド値を持つドキュメントを絞り込みたい場合は、$regex演算子が便利です。本記事では、「13」で始まる値を持つドキュメントをカウントする具体的な手順を解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。
> db.demo570.insertOne({Information:{Value:"13675"}});{
"acknowledged" : true, "insertedId" : ObjectId("5e90959b39cfeaaf0b97b583")
}
> db.demo570.insertOne({Information:{Value:"14135"}});{
"acknowledged" : true, "insertedId" : ObjectId("5e9095a739cfeaaf0b97b584")
}
> db.demo570.insertOne({Information:{Value:"15113"}});{
"acknowledged" : true, "insertedId" : ObjectId("5e9095b639cfeaaf0b97b585")
}
> db.demo570.insertOne({Information:{Value:"13141"}});{
"acknowledged" : true, "insertedId" : ObjectId("5e9095c139cfeaaf0b97b586")
}上記のコードでは、demo570というコレクションに対して、4つのドキュメントを挿入しています。それぞれのドキュメントは、ネストされたInformation.Valueフィールドに異なる数値文字列を持っています。
挿入したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo570.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e90959b39cfeaaf0b97b583"), "Information" : { "Value" : "13675" } }
{ "_id" : ObjectId("5e9095a739cfeaaf0b97b584"), "Information" : { "Value" : "14135" } }
{ "_id" : ObjectId("5e9095b639cfeaaf0b97b585"), "Information" : { "Value" : "15113" } }
{ "_id" : ObjectId("5e9095c139cfeaaf0b97b586"), "Information" : { "Value" : "13141" } }$regexを使ったドキュメントのカウント
「13」で始まる値を持つドキュメントだけをカウントするには、正規表現の先頭一致アンカー「^」を組み合わせた$regex条件を使用します。以下のようにクエリを記述します。
> db.demo570.count({'Information.Value': { '$regex' : '^13' }});このクエリを実行すると、次の出力が得られます。
2
結果として「2」が返されました。これは、値が「13675」と「13141」である2つのドキュメントのみが「13」で始まっているためです。「14135」や「15113」は途中に「13」を含んでいますが、先頭ではないためカウント対象外となります。
パフォーマンスに関するポイント
$regexによる検索では、パターンが「^13」のように文字列の先頭から一致するアンカー付き正規表現であれば、インデックスを利用できるため高速な処理が期待できます。一方、先頭にアンカーがないパターン(例:「13」を含むすべてのドキュメントを検索する場合)では、インデックスが使用されずフルスキャンになる可能性があるため注意が必要です。大量のデータを扱う場合は、対象フィールドにインデックスを作成しておくことをおすすめします。
まとめ
MongoDBで特定の接頭辞を持つフィールド値のドキュメント数をカウントするには、count()メソッドと$regex演算子を組み合わせるのが簡単かつ効果的です。特に「^」を使った先頭一致の正規表現は、インデックスを活用できパフォーマンス面でも優れています。ログIDや電話番号など、接頭辞で分類されたデータを集計する際にぜひ活用してください。
-
MySQLで列内の特定の値の出現回数(カウント)を取得する方法
MySQLでは、COUNT(*)関数とWHERE句を組み合わせることで、特定の列に含まれる指定した値の出現回数を簡単に取得できます。この記事では、サンプルテーブルを作成し、実際にクエリを実行しながら手順を解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable ( Id int, Name varchar(100) ); Query OK, 0 rows affected (1.40 sec) Id(整数型)とName(可変長文字列型)の2つの列を持つ
-
MySQLで最も出現回数の多い値を取得する方法(ORDER BY COUNT(*)の使い方)
MySQLでカウント(出現回数)が最も多い値を取得する方法MySQLで特定のフィールドに出現回数が最も多い値を取得したい場合は、GROUP BYとORDER BY COUNT(*)を組み合わせます。この記事では、実際にテーブルを作成しながら、その手順をサンプルコード付きでわかりやすく解説します。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1940 ( FirstName varchar(20) ); Query OK, 0 rows affected (0.00 se