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

$avg(ウィンドウ関数)

$avg

特定のウィンドウからの値の平均を返します。

注意

曖昧さ回避

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

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

  • $avg (accumulator)は、入力ドキュメントの変数に基づいて単一の集計値を返します。

  • $avg (expression)は、配列内の数値要素の平均を返します。

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

デフォルトの戻り値の型は double です。少なくとも 1 つの入力値が小数の場合、戻り値の型は小数になります。

$avg は欠落値を含む数値以外の値を無視します。すべての入力値が数値以外の場合、$avg は null を返します。

カリフォルニア州(CA)とワシントン州(WA)のケーキ販売を含む cakeSales コレクションを作成します。

db.cakeSales.insertMany( [
{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120 },
{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140 },
{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145 },
{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104 },
{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162 },
{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134 }
] )

この例では、$avgウィンドウ関数を使用して、各 state のケーキ売上 quantity の移動平均を出力します。各州について、注文の平均数量と以前のすべての注文を含む各ドキュメントにフィールドを追加します。

db.cakeSales.aggregate( [
{
$setWindowFields: {
partitionBy: "$state",
sortBy: { orderDate: 1 },
output: {
averageQuantityForState: {
$avg: "$quantity",
window: {
documents: [ "unbounded", "current" ]
}
}
}
}
}
] )

CA と WA の移動平均 quantity は averageQuantityForStateフィールドに表示されます。

[
{
_id: 4,
type: 'strawberry',
orderDate: ISODate('2019-05-18T16:09:01.000Z'),
state: 'CA',
price: 41,
quantity: 162,
averageQuantityForState: 162
},
{
_id: 0,
type: 'chocolate',
orderDate: ISODate('2020-05-18T14:10:30.000Z'),
state: 'CA',
price: 13,
quantity: 120,
averageQuantityForState: 141
},
{
_id: 2,
type: 'vanilla',
orderDate: ISODate('2021-01-11T06:31:15.000Z'),
state: 'CA',
price: 12,
quantity: 145,
averageQuantityForState: 142.33333333333334
},
{
_id: 5,
type: 'strawberry',
orderDate: ISODate('2019-01-08T06:12:03.000Z'),
state: 'WA',
price: 43,
quantity: 134,
averageQuantityForState: 134
},
{
_id: 3,
type: 'vanilla',
orderDate: ISODate('2020-02-08T13:13:23.000Z'),
state: 'WA',
price: 13,
quantity: 104,
averageQuantityForState: 119
},
{
_id: 1,
type: 'chocolate',
orderDate: ISODate('2021-03-20T11:30:05.000Z'),
state: 'WA',
price: 14,
quantity: 140,
averageQuantityForState: 126
}
]

前の例では、次のようになります。

  • partitionBy: "$state" はコレクション内のドキュメントを state で分割します。CA と WA のパーティションがあります。

  • sortBy: { orderDate: 1 } は、各パーティション内のドキュメントを orderDate で昇順(1)に並べ替えるので、最も古い orderDate が最初になります。

  • output averageQuantityForStateドキュメントウィンドウ内のドキュメントの移動平均quantity に フィールドを設定します。

    unboundedウィンドウ には、 下限とcurrent ドキュメントの間にあるドキュメントが出力されます。つまり、$avg quantityは、パーティションの先頭から現在のドキュメントまでのドキュメントの の移動平均を返します。

このページを評価