MongoDBの集計パイプラインで配列の長さを取得する方法($size演算子の使い方)
MongoDBで配列の要素数を取得するには
MongoDBの集計パイプライン(Aggregation Pipeline)では、$projectステージと組み合わせて$size演算子を使用することで、配列フィールドの長さ(要素数)を簡単に取得できます。
この記事では、実際にコレクションを作成し、ドキュメント内の配列の長さを集計クエリで取得する手順を順番に解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、配列を含むドキュメントをコレクションに挿入します。
> db.demo382.insertOne(
... {
... "Name" : "David",
... "details" : [
... {
... "SubjectName": "MySQL"
... },
... {
... "SubjectName": "MongoDB"
... },
... {
... "SubjectName": "Java"
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e5b5e1c22064be7ab44e7f0")
}2. 挿入したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo382.find().pretty();
このクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e5b5e1c22064be7ab44e7f0"),
"Name" : "David",
"details" : [
{
"SubjectName" : "MySQL"
},
{
"SubjectName" : "MongoDB"
},
{
"SubjectName" : "Java"
}
]
}ここで、「details」フィールドには3つの科目データが格納されていることが確認できます。
3. $projectと$sizeで配列の長さを集計する
続いて、$matchで対象ドキュメントを絞り込み、$projectステージ内で$size演算子を適用することで、配列「details」の長さをカウントします。
> db.demo382.aggregate([
... { "$match": { "Name": "David" } },
... { "$project": { "count": { "$size": "$details" }}}
... ])実行結果は以下の通りです。
{ "_id" : ObjectId("5e5b5e1c22064be7ab44e7f0"), "count" : 3 }出力を見ると、countフィールドに「3」という値が返され、配列「details」に含まれる要素数が正しく取得できていることがわかります。
ポイント解説
- $match:条件に一致するドキュメントだけを抽出します。ここでは「Name」が「David」のドキュメントを対象としています。
- $project:出力するフィールドを指定・整形するステージです。既存フィールドの変換や新規フィールドの追加が可能です。
- $size:引数に指定した配列の要素数を整数で返す演算子です。配列以外の値を渡すとエラーになるため注意が必要です。
なお、配列の一部だけを取り出したい場合は$slice演算子を使用しますが、単純に配列の長さ(件数)を知りたい場合は、本記事のように$sizeを使うのが最もシンプルかつ効率的です。アプリケーション開発において、ネストされた配列データの件数を集計したい場面は多いため、このパターンは覚えておくと非常に便利です。
-
MongoDB集計パイプラインで重複するNameフィールド値ごとの出現回数を取得する方法
MongoDBでは、$unwindと$groupを組み合わせた集計(アグリゲーション)パイプラインを使うことで、配列内に存在する重複したフィールド値を名前ごとにグループ化し、それぞれの出現回数を簡単に取得できます。ここでは、具体的な例をもとにその手順を解説します。サンプルコレクションの作成まずは、ドキュメントを含むコレクションを作成してみましょう。以下の例では、demo558というコレクションに、国コードと複数人の受講科目情報を持つドキュメントを挿入します。> db.demo558.insertOne( ... { ... _id : 100, ... CountryCode
-
MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法
MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ... { ... Information:Student, ... &