MongoDBで配列サイズを合計する最良の方法!$sumと$sizeの使い方を実例で解説
MongoDBで配列サイズ(要素数)を合計する方法
MongoDBで配列フィールドのサイズ(要素数)を合計したい場合は、集計パイプライン(aggregate())において$sum演算子と$size演算子を組み合わせるのが最も効率的な方法です。
この記事では、実際にコレクションを作成し、配列の要素数を合計するまでの一連の手順をサンプルコード付きで解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って「Subjects」という配列フィールドを持つドキュメントを複数件作成します。
> db.demo231.insertOne({"Subjects":["MongoDB","MySQL","SQL Server"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3fc73ff4cebbeaebec5143")
}
> db.demo231.insertOne({"Subjects":["Java","C","C++"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3fc757f4cebbeaebec5144")
}
> db.demo231.insertOne({"Subjects":["Python","Spring"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3fc762f4cebbeaebec5145")
}
2. 登録したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo231.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3fc73ff4cebbeaebec5143"), "Subjects" : [ "MongoDB", "MySQL", "SQL Server" ] }
{ "_id" : ObjectId("5e3fc757f4cebbeaebec5144"), "Subjects" : [ "Java", "C", "C++" ] }
{ "_id" : ObjectId("5e3fc762f4cebbeaebec5145"), "Subjects" : [ "Python", "Spring" ] }
3. 配列サイズを合計するクエリ
以下が、MongoDBで配列サイズフィールドを合計するためのクエリです。$groupステージ内で$sumと$sizeを組み合わせています。
> db.demo231.aggregate([{'$group': {'_id': '_id', 'ToTalValue': {'$sum': {'$size': '$Subjects'}}}}])
実行すると、次の出力が得られます。
{ "_id" : "_id", "ToTalValue" : 8 }
結果の解説
各ドキュメントの配列「Subjects」の要素数は、それぞれ「3件」「3件」「2件」です。その合計である8が「ToTalValue」として出力されました。
$size演算子が配列の長さを取得し、$sum演算子がそれをすべて合計する仕組みです。
補足:より一般的な書き方
すべてのドキュメントをまとめて合計する場合、グループ化のキーには_id: nullを指定するのが一般的です。以下のように書くことで、意図がより明確になります。
> db.demo231.aggregate([
... { $group: { _id: null, totalSubjects: { $sum: { $size: "$Subjects" } } } }
... ])
この方法なら、条件に応じて$matchステージを組み合わせるなど、柔軟な集計処理にも対応できます。
-
MongoDBで配列の値を他のフィールドと連結するクエリの書き方
MongoDBで文字列を連結するには、$projectステージ内で$concat演算子を使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。> db.demo359.insertOne( ... { ... Name1: Chris, ... Name2: David, ... Subjects: [MySQL,MongoDB,Java] ... } ... ); { acknowledged : true, insertedId : ObjectId(5e5694cdf8647eb59e5620d0) }コ
-
MongoDBで配列フィールドに対して$allを使って全要素に一致させる方法
配列フィールドの全要素に一致させるには MongoDBで配列内のすべての指定要素を含むドキュメントを検索したい場合には、$all 演算子を使用します。$all は、対象フィールドの値が配列であり、その配列が指定した要素をすべて含んでいるドキュメントだけを選択するクエリ演算子です。 ここでは、サンプルコレクションを作成し、実際に $all を使った検索手順を順番に見ていきましょう。 1. コレクションへのドキュメント登録 まずは insertOne() メソッドを使って、サンプルコレクション「demo695」にドキュメントを挿入します。 > db.demo695.insertOne({L