MongoDBで2つのフィールドに一致するドキュメントのみをカウントする方法
MongoDBで2つのフィールドに一致するドキュメントのみをカウントするには?
MongoDBでは、複数のフィールド条件に一致するドキュメントのみをカウントしたい場合、count()メソッドを使用します。この記事では、実際にサンプルコレクションを作成しながら、具体的な手順をわかりやすく解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。
> db.demo175.insertOne({"EmployeeName":"Bob","isMarried":"YES"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3840969e4f06af551997e8")
}
> db.demo175.insertOne({"EmployeeName":"David","isMarried":"NO"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e38409e9e4f06af551997e9")
}
> db.demo175.insertOne({"EmployeeName":"Mike","isMarried":"YES"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3840a79e4f06af551997ea")
}
> db.demo175.insertOne({"EmployeeName":"Sam","isMarried":"NO"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3840ae9e4f06af551997eb")
}
登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo175.find();
上記のクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e3840969e4f06af551997e8"), "EmployeeName" : "Bob", "isMarried" : "YES" }
{ "_id" : ObjectId("5e38409e9e4f06af551997e9"), "EmployeeName" : "David", "isMarried" : "NO" }
{ "_id" : ObjectId("5e3840a79e4f06af551997ea"), "EmployeeName" : "Mike", "isMarried" : "YES" }
{ "_id" : ObjectId("5e3840ae9e4f06af551997eb"), "EmployeeName" : "Sam", "isMarried" : "NO" }
2つのフィールドに一致するドキュメントをカウントするクエリ
それでは本題です。count()メソッドの引数に、カンマ区切りで複数の条件を指定することで、両方のフィールドに一致するドキュメントのみをカウントできます。以下の例では、「EmployeeName」が「Mike」かつ「isMarried」が「YES」であるドキュメントを数えています。
> db.demo175.count( { "EmployeeName": "Mike", "isMarried":"YES" } );
実行結果は以下のとおりです。
1
このように、該当するドキュメントは1件のみであるため、結果として「1」が返されます。条件に一致しないドキュメントはカウントから除外されるため、複数条件での絞り込みが正確に行えます。
補足:最新のMongoDBではcountDocuments()の使用を推奨
なお、count()メソッドはMongoDBの新バージョンでは非推奨(deprecated)となっています。現在の開発では、より正確な結果が得られるcountDocuments()メソッドを使用することが推奨されています。書き方はほぼ同じです。
> db.demo175.countDocuments( { "EmployeeName": "Mike", "isMarried":"YES" } );
実務ではこちらを使うことで、正確なカウント結果を取得できます。用途に応じて使い分けましょう。
-
MongoDBの$group操作でソートし、各グループの先頭ドキュメントのみを取得する方法
MongoDBの集計パイプラインでは、$sortでドキュメントを並べ替えた後に$groupと$firstを組み合わせることで、グループごとにソート結果の先頭1件だけを効率的に取得できます。本記事では、サンプルコレクションを作成しながら、その具体的な手順をわかりやすく解説します。サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo576.insertOne({id:101,Name:"Chris",Marks:45}){ "acknowledged" : tr
-
MongoDBでカーソルの反復回数をカウントする方法を解説
MongoDBでカーソルの反復をカウントするには?MongoDBにおいて、whileループとfind()メソッドが返すカーソルを組み合わせた独自のロジックを実装することで、カーソルの反復回数(特定の条件に一致するドキュメント数)をカウントできます。本記事では、実際のコード例を通じて、その具体的な手順をわかりやすく解説します。1. ドキュメントを含むコレクションを作成するまず、サンプル用のドキュメントを挿入してコレクションを作成します。> db.demo724.insertOne( ... { ... details: ... { ...