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

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

項目一覧

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

集計段階や演算子の中には、 時系列コレクションで使用する場合に特別な考慮が必要なものがあります。

時系列コレクションは、2dsphere インデックスに対するクエリからの 地理空間データをソートするための $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 を使用して、月あたりの平均価格を計算します。

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
}

戻る

クエリ