MongoDBで条件に一致するレコード数をカウントする方法|count()の使い方を解説
MongoDBで特定の条件に一致するレコードの件数を取得したい場合は、count()メソッドを使用します。この記事では、実際にコレクションを作成し、条件に基づいてレコードをカウントする手順を具体的なコード例とともに解説します。
サンプルコレクションの作成
まずは、insertOne()メソッドを使ってドキュメントを含むコレクションを作成します。
> db.demo205.insertOne(
... {
... "id": "101",
... "Name": "",
... "Age": "",
... "isActive": false
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3d8a3003d395bdc21346eb")
}
> db.demo205.insertOne(
... {
... "id": "102",
... "Name": "Chris",
... "Age": "25",
... "isActive": true
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3d8a3003d395bdc21346ec")
}
> db.demo205.insertOne(
... {
... "id": "103",
... "Name": "",
... "Age": "",
... "isActive": false
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3d8a3003d395bdc21346ed")
}上記のコレクションには3件のドキュメントが登録されました。うち2件は「Name」と「Age」が空文字列で「isActive」がfalse、残りの1件はすべてのフィールドに値が入っています。
登録済みドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo205.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e3d8a3003d395bdc21346eb"), "id" : "101", "Name" : "", "Age" : "", "isActive" : false }
{ "_id" : ObjectId("5e3d8a3003d395bdc21346ec"), "id" : "102", "Name" : "Chris", "Age" : "25", "isActive" : true }
{ "_id" : ObjectId("5e3d8a3003d395bdc21346ed"), "id" : "103", "Name" : "", "Age" : "", "isActive" : false }条件に一致するレコードをカウントするクエリ
ここからが本題です。条件に一致するレコードの件数をカウントするには、count()メソッドの引数に検索条件を渡します。以下の例では、「Name」が空文字列かつ「Age」が空文字列かつ「isActive」がfalseであるドキュメントをカウントしています。
> db.demo205.count({
... Name: "",
... Age: "",
... "isActive": false
... });実行結果は以下のとおりです。
2
条件に一致したのは「101」と「103」の2件であるため、正しく「2」が出力されました。
補足:count()とcountDocuments()の違い
なお、MongoDBのバージョン4.0以降ではcount()は非推奨となっており、現在はより正確なcountDocuments()の使用が推奨されています。
> db.demo205.countDocuments({
... Name: "",
... Age: "",
... isActive: false
... });countDocuments()はフィルタ条件を正確に評価して件数を返すため、実務ではこちらを使うようにしましょう。コレクション全体のおおよその件数だけが必要な場合は、高速なestimatedDocumentCount()も選択肢になります。
-
MySQLでIS NULLまたは!=1の条件に基づいてレコードを表示するクエリの書き方
MySQLでNULLまたは1以外のレコードを抽出する方法MySQLでは、特定のカラムがNULLであるレコード、または特定の値と等しくないレコードを抽出したいケースはよくあります。ここでは、「Score」カラムがNULL、もしくは1以外であるレコードを取得する方法を解説します。なお、NULL値との比較には「=」や「!=」が使えない点に注意が必要です。NULLは「不明な値」を意味するため、通常の比較演算子では評価されず、必ずIS NULL演算子を使う必要があります。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable (
-
MySQLクエリで姓ごとのレコード数を新しい列として追加する方法
MySQLでは、COUNT()とGROUP BYを組み合わせたサブクエリを元のテーブルとJOINすることで、各レコードの姓(LastName)が出現する回数を、結果セットに新しい列として表示できます。ここでは、「Miller」という姓が2回登場するデータを例に、具体的な手順を解説します。 1. サンプルテーブルの作成 まず、以下のようにテーブルを作成します。 mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName varchar(100), Las