Docs Menu
Docs Home
/
MongoDB マニュアル
/ /

集計と演算子に関する考慮事項

項目一覧

  • $geonear
  • $merge
  • $out
  • 頻繁に使用される操作
  • 1 か月あたりの平均価格の計算
  • 30日のローリング平均の計算

一部の集計ステージと演算子は、 時系列コレクションで使用する場合、特別な考慮事項を必要とします。

時系列コレクションは、2 dsphere インデックスに対するクエリからの$geoNear$near 地理空間データ をソートするための 集計ステージのみをサポートします。時系列コレクションでは }$nearSphere 演算子と 演算子は使用できません。

$merge 集計ステージを使用して、別のコレクションのデータを時系列コレクションに追加することはできません。

MongoDB 7.0以降では、 $out集計ステージを使用して時系列コレクションにドキュメントを書込み (write) できます。詳細については、「時系列コレクションへのデータの移行 」を参照してください。

次の集計パイプライン演算子とステージは、時系列データの分析によく使用されます。

  • $dateAdd: 指定された期間を Dateオブジェクトに追加します。

  • $dateDiff: 2 つの日付間の時間差を返します。

  • $dateTrunc: 特定の単位で切り捨てられた日付を返します。

  • $setWindowFields: 指定されたウィンドウ内のドキュメントに対して計算を実行します。

次の構造を持つドキュメントを含むdowJonesTickerDataコレクションについて考えてみます。

{
date: ISODate("2020-01-03T05:00:00.000Z"),
symbol: 'AAPL',
volume: 146322800,
open: 74.287498,
adjClose: 73.486023,
high: 75.144997,
low: 74.125,
close: 74.357498
}

この集計パイプラインは、次のアクションを実行します。

  • $dateTruncを使用して、各ドキュメントのdateを適切な月に切り捨てます。

  • $groupを使用して、ドキュメントを月と記号ごとにグループ化します。

  • $avgを使用して、1 か月あたりの平均価格を計算します。

db.dowJonesTickerData.aggregate( [ {
$group: {
_id: {
firstDayOfMonth: {
$dateTrunc: {
date: "$date",
unit: "month"
}
},
symbol: "$symbol"
},
avgMonthClose: {
$avg: "$close"
}
}
} ] )

パイプラインはドキュメントのセットを返します。各ドキュメントには特定の株式の 1 か月あたりの平均終了価格が含まれています。

{
_id: {
firstDayOfMonth: ISODate("2020-06-01T00:00:00.000Z"),
symbol: 'GOOG'
},
avgMonthClose: 1431.0477184545455
},
{
_id: {
firstDayOfMonth: ISODate("2021-07-01T00:00:00.000Z"),
symbol: 'MDB'
},
avgMonthClose: 352.7314293333333
},
{
_id: {
firstDayOfMonth: ISODate("2021-06-01T00:00:00.000Z"),
symbol: 'MSFT'
},
avgMonthClose: 259.01818086363636
}

次の構造を持つドキュメントを含むdowJonesTickerDataコレクションについて考えてみます。

{
date: ISODate("2020-01-03T05:00:00.000Z"),
symbol: 'AAPL',
volume: 146322800,
open: 74.287498,
adjClose: 73.486023,
high: 75.144997,
low: 74.125,
close: 74.357498
}

この集計パイプラインは、次の操作を実行します。

  • $setWindowFieldsを使用して30日の期間を指定しウィンドウ。

  • 各株式について、過去30日間の最終価格のローリング平均を計算します。

db.dowJonesTickerData.aggregate( [
{ $setWindowFields: {
partitionBy: { symbol : "$symbol" } ,
sortBy: { date: 1 },
output: {
averageMonthClosingPrice: {
$avg : "$close",
window : { range : [-1, "current"], unit : "month" }
}
}
} }
] )

パイプラインは一連のドキュメントを返します。各ドキュメントには、その株式記号の前月の最終値の平均が含まれる$averageMonthClosingPriceフィールドが含まれています。

{
date: ISODate("2020-01-29T05:00:00.000Z"),
symbol: 'AAPL',
volume: 216229200,
adjClose: 80.014801,
low: 80.345001,
high: 81.962502,
open: 81.112503,
close: 81.084999,
averageMonthClosingPrice: 77.63137520000001
}

戻る

クエリ