MongoDBのアグリゲーションフレームワークで2つのフィールドを合計する方法
はい、可能です。$projectステージと$add演算子を組み合わせることで、アグリゲーションフレームワークを使って2つのフィールドの値を合計できます。まずは、サンプルとなるドキュメントを含むコレクションを作成しましょう。
1. サンプルコレクションの作成
insertOne()メソッドを使って、3件のドキュメントを登録します。
> db.sumTwoFieldsDemo.insertOne({"FirstValue":150,"SecondValue":350});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9b4bfe15e86fd1496b38cd")
}
> db.sumTwoFieldsDemo.insertOne({"FirstValue":450,"SecondValue":1550});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9b4c1215e86fd1496b38ce")
}
> db.sumTwoFieldsDemo.insertOne({"FirstValue":2560,"SecondValue":2440});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9b4c2715e86fd1496b38cf")
}
2. 登録したドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを確認できます。
> db.sumTwoFieldsDemo.find().pretty();
実行すると、以下のように登録された3件のドキュメントが表示されます。
{
"_id" : ObjectId("5c9b4bfe15e86fd1496b38cd"),
"FirstValue" : 150,
"SecondValue" : 350
}
{
"_id" : ObjectId("5c9b4c1215e86fd1496b38ce"),
"FirstValue" : 450,
"SecondValue" : 1550
}
{
"_id" : ObjectId("5c9b4c2715e86fd1496b38cf"),
"FirstValue" : 2560,
"SecondValue" : 2440
}
3. $projectと$addで2つのフィールドを合計する
アグリゲーションパイプラインの$projectステージ内で$add演算子を使用すると、各ドキュメントの2つのフィールド値を足し合わせた新しいフィールドを作成できます。
> db.sumTwoFieldsDemo.aggregate(
... { "$project" :
... {
... 'First' : '$FirstValue',
... 'Second' : '$SecondValue',
... 'TotalValueOfBothFields' : { '$add' : [ '$FirstValue', '$SecondValue' ] },
... }
... }
... );
実行結果は以下の通りです。「TotalValueOfBothFields」に、各ドキュメントの「FirstValue」と「SecondValue」の合計値(500 / 2000 / 5000)が出力されていることがわかります。
{ "_id" : ObjectId("5c9b4bfe15e86fd1496b38cd"), "First" : 150, "Second" : 350, "TotalValueOfBothFields" : 500 }
{ "_id" : ObjectId("5c9b4c1215e86fd1496b38ce"), "First" : 450, "Second" : 1550, "TotalValueOfBothFields" : 2000 }
{ "_id" : ObjectId("5c9b4c2715e86fd1496b38cf"), "First" : 2560, "Second" : 2440, "TotalValueOfBothFields" : 5000 }
ポイントまとめ
- $project:出力するフィールドを選択・整形するステージです。既存フィールドの値を参照したり、計算結果を新しいフィールドとして追加できます。
- $add:数値同士を加算する算術演算子です。配列形式で複数の式を受け取ることができ、ここでは2つのフィールドの合計を求めています。
このように、$projectと$addを組み合わせるだけで、集計パイプラインの中で複数フィールドの合計値を簡単に計算できます。3つ以上のフィールドを合計したい場合も、$addの配列に要素を追加するだけで対応可能です。
-
MongoDBの集計パイプラインで複数フィールドをカウントする方法($facet活用)
MongoDBで複数のフィールドごとにドキュメントをカウントしたい場合、$facet演算子を使うのが効果的です。$facetは、同じ入力ドキュメント群に対して、単一のステージ内で複数の集計パイプラインを同時に処理できる強力な機能です。この記事では、実際にコレクションを作成し、$facetを組み合わせた集計クエリで複数フィールドの値をカウントする手順を解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使ってサンプルドキュメントを挿入します。各ドキュメントにはdetails1・details2・details3という3つのネストされたフィールドを持たせます。>
-
C++で2つの配列の共通要素の合計を求める方法
この問題では、すべての要素が互いに異なる(ユニークな値を持つ)2つの配列 arr1[] と arr2[] が与えられます。私たちのタスクは、2つの配列に共通して存在する要素の合計(オーバーラップサム)を求めることです。 問題の概要 両方の配列に出現する要素をすべて見つけ、その合計値を返します。共通要素は各配列に1つずつ存在するため、1つの共通要素につき値を2回加算することになります。 具体例で理解しよう 入力: arr1[] = {5, 4, 9, 2}, arr2[] = {6, 3, 9, 4} 出力: 26 解説 両方の配列に存在する要素は「9」と「4」です。 合計は 9 + 9 + 4