$setWindowFields (ウィンドウフィールド)

最終更新:2026-10-09

$setWindowFields (ウィンドウフィールド)

$setWindowFields は、パーティション内でウィンドウ計算 — 順位、移動平均、累計 — を行い、結果を各ドキュメントに書き戻します。出力フィールドにウィンドウ演算子($rank、$denseRank やアキュムレータ)を指定し、sortBy で順序を、任意でウィンドウ範囲を指定します。SQL のウィンドウ関数に相当します。

カテゴリグループ化とウィンドウ
MongoDB バージョン5.0+
例の言語mongosh(シェル)

📝 構文

{ $setWindowFields: { partitionBy: <expression>, sortBy: { <field>: <1 or -1> }, output: { <field>: { <windowOperator>: ..., window: { documents: [...], range: [...] } } } } }

⚙️ パラメータ

partitionByパーティション式。省略した場合、すべてのドキュメントが1つのパーティションを形成します。
sortByパーティション内の並び順。ウィンドウ計算の順序を決定します。
outputウィンドウ演算子の定義を持つ出力フィールド。

戻り値:ウィンドウ計算フィールドを追加したドキュメントストリーム

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $setWindowFields: 地域ごとの累計を計算
db.sales.aggregate([
  { $setWindowFields: {
    partitionBy: '$region',
    sortBy: { date: 1 },
    output: {
      runningTotal: { $sum: '$amount', window: { documents: ['unbounded', 'current'] } }
    }
  } }
])

出力:

// 各売上に累計が付く
{ "region": "EAST", "date": "2024-01-02", "amount": 30, "runningTotal": 30 }

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$setWindowFields と $group の違いは?
A$group はグループを 1 つのドキュメントに畳みます。$setWindowFields はすべてのドキュメントを保持し、ウィンドウ計算の結果を各ドキュメントに書き戻します。
Q移動平均を計算できますか?
Aはい。ウィンドウを直前 7 件から現在までに設定し、$avg アキュムレータを使います。
Qウィンドウ範囲はどう書きますか?
Aたとえば { documents: ['unbounded', 'current'] } はパーティションの先頭から現在のドキュメントまでを範囲にします。range は値の区間を定義します。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%