AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$sum(ウィンドウ関数)

$sum

特定のウィンドウ内のドキュメントから数値の合計を返します。

注意

$sum のその他の用途

このページでは、ウィンドウ関数として使用する場合の$sum について説明します。

次の他のコンテキストでは $sum を使用することもできます。

{
$setWindowFields: {
...
output: {
<field>: {
$sum: <expression>
}
}
}
}

入力型が混在している場合、$sum は小さい入力型を 2 つのうち大きい方にプロモートします。型は、より幅広い値を表す場合、より大きな値と見なされます。数値型の最小値から最大値の順は、integer → long → double → decimal です。

演算がオーバーフローして、大きい方のデータ型で表される範囲を超えない限り、大きい方の入力型によって結果型も決まります。オーバーフローの場合、$sum は以下の順序に従って結果を昇格させます。

  • より大きな入力型が integer の場合、結果型は long に昇格します。

  • より大きな入力型が long の場合、結果型は double に昇格します。

  • より大きな型がdouble またはdecimal の場合、オーバーフローした結果は正の無限大または負の無限大として表されます。結果の型の昇格はありません。

ウィンドウ内のドキュメントの一部のドキュメントで、フィールドの値が null であるか、フィールドが欠落している場合、$sum はそれらの値を無視し、残りの 値を合計します。

nullウィンドウ内のすべてのドキュメントで、フィールドの値が であるか、フィールドが欠落している場合、$sum は0 を返します。

このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。

この例では、$setWindowFields 2009を使用して、 と2010 から各ビジュアル映画の実行中の累積投票合計を計算します。各ドキュメントには、年ごとのパーティションの先頭から現在のドキュメントまで計算された$sum 値が含まれます。

db.movies.aggregate( [
{
$match: {
genres: "Musical",
year: { $in: [ 2009, 2010 ] },
"imdb.rating": { $type: "double" },
"imdb.votes": { $gt: 0 }
}
},
{
$setWindowFields: {
partitionBy: "$year",
sortBy: { title: 1 },
output: {
cumulativeVotesInYear: {
$sum: "$imdb.votes",
window: {
documents: [ "unbounded", "current" ]
}
},
rankInYear: {
$documentNumber: {}
}
}
}
},
{
$project: {
_id: 0,
title: 1,
year: 1,
"imdb.votes": 1,
cumulativeVotesInYear: 1,
rankInYear: 1
}
},
{ $sort: { year: 1, title: 1 } }
] )

先行するパイプライン:

  • $match20092010を使用して、数値 IMDb 評価と少なくとも 1 票を持つ と のビジュアル映画をフィルタリングします。

  • $setWindowFieldsを使用して、映画を で分割し、year titleでソートします。ステージでは、$sum と[ "unbounded", "current" ] のドキュメントウィンドウを使用して、各ドキュメントごとに次のフィールドを作成します。

    • cumulativeVotesInYear: imdb.votes の実行中の累積合計。

    • rankInYear: $documentNumber によって割り当てられたパーティションごとの行番号。

  • $projecttitleを使用して、 、year 、imdb.votes 、cumulativeVotesInYear 、rankInYear を出力に含めます。

  • $sort結果を年とタイトルで並べ替えるには、 を使用します。

このページを評価