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

MongoDBの集計パイプラインで特定の学生のスコアを合計する方法($sum演算子の活用)

MongoDBで数値の合計を求めるには、aggregate()メソッドと$sum演算子を組み合わせて使用します。この記事では、特定の学生のスコアを合計する具体的な手順を、サンプルコードとともに解説します。

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

まずは、ドキュメントを格納したコレクションを作成しましょう。ここではdemo434というコレクションに、学生の名前とスコアのデータを挿入します。

> db.demo434.insertOne({"Name":"Chris","Score":45});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e771603bbc41e36cc3cae93")
}
> db.demo434.insertOne({"Name":"David","Score":55});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e77161abbc41e36cc3cae94")
}
> db.demo434.insertOne({"Name":"Chris","Score":55});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e771624bbc41e36cc3cae95")
}

2. 登録されたドキュメントの確認

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

> db.demo434.find();

上記のコマンドを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e771603bbc41e36cc3cae93"), "Name" : "Chris", "Score" : 45 }
{ "_id" : ObjectId("5e77161abbc41e36cc3cae94"), "Name" : "David", "Score" : 55 }
{ "_id" : ObjectId("5e771624bbc41e36cc3cae95"), "Name" : "Chris", "Score" : 55 }

3. 特定の学生のスコアを合計するクエリ

ここからが本題です。特定の学生(この例では「Chris」)のスコアを合計するには、集計パイプラインの中で$matchステージと$groupステージを組み合わせます。

  • $match: 条件に一致するドキュメントだけを抽出します(ここでは「Name」が「Chris」のドキュメント)。
  • $group: 抽出したドキュメントをグループ化し、$sum演算子で「Score」フィールドの合計値を計算します。
> db.demo434.aggregate([
...     { "$match": { "Name": "Chris"} },
...     { "$group": { "_id": null, "TotalScore": { "$sum": "$Score" } } }
... ]);

このクエリを実行すると、以下の出力が得られます。

{ "_id" : null, "TotalScore" : 100 }

結果の解説

出力を見ると、「Chris」のスコアである45と55が合計され、TotalScoreとして100が返されていることがわかります。_idがnullになっているのは、$groupステージですべての一致ドキュメントを単一のグループとして扱っているためです。

このように、$matchで対象を絞り込み、$groupと$sumで集計するという流れは、MongoDBにおける基本的かつ強力なデータ集計パターンです。条件を変更すれば、任意の学生や任意のフィールドに対して同じ手法を応用できます。

  1. MongoDBの集約(Aggregation)で特定のフィールド値を持つドキュメントを取得する方法

    特定の条件に一致するドキュメントを取得したい場合には、aggregate() メソッドを使用します。ここでは、フィールド「Age」の値が「21」であるドキュメントを取得するケースを例に解説します。 サンプルコレクションの作成 まずは、ドキュメントを含むコレクションを作成しましょう。 > db.demo685.insertOne( ... { ... details: ... [ ... { ... Name:Chris, ... Age:21 ... }, ..

  2. MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説

    MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db