MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで2つのフィールド(列)の合計を計算し、別のフィールドに保存する方法

MongoDBで2つのフィールド(列)の合計を求めるには、集計パイプラインの $add 演算子を使用します。この記事では、サンプルコレクションを作成し、実際に合計値を計算する手順を順番に解説します。

1. サンプルコレクションの作成

まず、insertOne() メソッドを使ってドキュメントを挿入し、コレクション demo291 を作成します。

> db.demo291.insertOne({"Value1":10,"Value2":50});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4c0e1e5d93261e4bc9ea2f")
}

2. ドキュメントの確認

find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。

> db.demo291.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e4c0e1e5d93261e4bc9ea2f"), "Value1" : 10, "Value2" : 50 }

3. 2つのフィールドの合計を計算する

次のクエリでは、aggregate()$project ステージ内で $add を使用し、Value1Value2 の合計を新しいフィールド「Value3」として出力しています。

> db.demo291.aggregate(
...   { "$project" : {
...       'Value1' : '$Value1',
...       'Value2' : '$Value2',
...       'Value3' : { '$add' : [ '$Value1', '$Value2' ] }
...   }
...   }
...);

実行結果は以下のとおりです。「Value3」に合計値が格納されていることが確認できます。

{ "_id" : ObjectId("5e4c0e1e5d93261e4bc9ea2f"), "Value1" : 10, "Value2" : 50, "Value3" : 60 }

補足:計算結果をコレクションに永続化するには

上記の $project を使う方法は、あくまでクエリ結果として合計値を表示するものです。計算結果をドキュメント自体に保存したい場合は、MongoDB 4.2以降で利用できる更新パイプラインを使用すると便利です。

> db.demo291.updateMany(
...   {},
...   [ { "$set": { "Value3": { "$add": ["$Value1", "$Value2"] } } } ]
... );

このように $set$add を組み合わせることで、既存のドキュメントに「Value3」フィールドを追加し、合計値を永続的に保存できます。用途に応じて、表示用の集計と保存用の更新を使い分けるとよいでしょう。

  1. Pandasで2つの列間の相関関係を取得する方法

    Pandasでは、.corr()メソッドを使うことで、DataFrame内の2つの列(カラム)間の相関係数を簡単に求めることができます。デフォルトではピアソンの相関係数が計算され、その値は-1から1の範囲で表されます。値が1に近いほど正の相関が強く、-1に近いほど負の相関が強いことを意味します。ここでは、具体的な例を通してこのメソッドの使い方を解説します。 手順 サイズ変更可能な2次元の表形式データであるDataFrame(df)を作成します。 入力のDataFrame(df)を表示して内容を確認します。 相関を調べたい列名をcol1とcol2という変数に代入します。 df[col1].co

  2. 【Python・Pandas】データフレームの特定の列の合計値を取得する方法

    データ分析をしていると、データフレーム(DataFrame)の中から特定の列だけの合計値を求めたい場面によく出会います。そんなときに便利なのが、Pandasのsum関数です。 合計を計算したい列をsum関数に渡すだけで、その列の合計値を簡単に取得できます。さらに、axis引数を指定すれば、列方向・行方向のどちらで集計するかも自由に制御可能です。 それでは、具体的なコード例を見ていきましょう。 サンプルコード import pandas as pd my_data = { Name: pd.Series([Tom, Jane, Vin, Eve, Will]), Age: p