MongoDBで特定フィールドの配列要素数を取得する方法($size演算子の使い方)
MongoDBでドキュメント内の特定フィールド(配列)に含まれる要素の数をカウントしたい場合は、集計パイプライン(aggregate)と$size演算子を組み合わせるのが最も簡単な方法です。
この記事では、実際のコレクションを作成しながら、配列要素数を取得する具体的な手順を解説します。
1. サンプルコレクションの作成
まず、配列型のフィールド「Subject」を持つドキュメントを含むコレクションを作成します。
> db.demo723.insertOne({"Subject":["MySQL","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab094d43417811278f588a")
}
> db.demo723.insertOne({"Subject":["C"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab095243417811278f588b")
}
> db.demo723.insertOne({"Subject":["C++","Java","Python"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab095f43417811278f588c")
}2. 登録したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo723.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5eab094d43417811278f588a"), "Subject" : [ "MySQL", "MongoDB" ] }
{ "_id" : ObjectId("5eab095243417811278f588b"), "Subject" : [ "C" ] }
{ "_id" : ObjectId("5eab095f43417811278f588c"), "Subject" : [ "C++", "Java", "Python" ] }3. $size演算子で配列要素数をカウントする
配列の要素数を取得するには、aggregate()メソッド内で$projectステージと$size演算子を組み合わせます。
> db.demo723.aggregate([
... { $project: { count: { $size: '$Subject' } } }
... ])実行結果は以下のとおりです。各ドキュメントの「Subject」配列に含まれる要素の数が「count」として出力されます。
{ "_id" : ObjectId("5eab094d43417811278f588a"), "count" : 2 }
{ "_id" : ObjectId("5eab095243417811278f588b"), "count" : 1 }
{ "_id" : ObjectId("5eab095f43417811278f588c"), "count" : 3 }ポイント解説
- $size演算子は、指定した配列フィールドの要素数を整数として返します。
- $projectステージで「count」という新しいフィールドを作成し、元のドキュメントごとに計算結果を格納しています。
- $sizeは引数として必ず配列を受け取る必要があります。フィールドが存在しない場合や配列以外の場合はエラーになるため、事前にデータ構造を確認しておきましょう。
- 条件に一致するドキュメントだけを対象にしたい場合は、$matchステージを$projectの前に追加することで絞り込みが可能です。
このように、$size演算子を使えばMongoDBの配列フィールドから簡単に要素数を取得できます。ログ分析やタグ数の集計など、さまざまなシーンで活用できるテクニックなので、ぜひ覚えておきましょう。
-
MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法
MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ... { ... Information:Student, ... &
-
【MongoDB】特定のフィールドの値に基づいて配列内のドキュメントをカウントする方法
MongoDBで配列内のドキュメントを条件付きでカウントする方法 MongoDBで、配列内の特定のフィールドの値に一致するドキュメントをカウントしたい場合は、集計パイプライン(Aggregation Pipeline)の $match ステージを使用します。本記事では、$unwind → $match → $group という流れで、配列要素を展開し、条件に合致するものだけを抽出してカウントする手順をサンプルコード付きで解説します。 1. サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成しましょう。 > db.demo726.insertOne( ...