Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

聚合和操作符注意事项

在此页面上

  • $geoNear
  • $merge
  • $out
  • 常用操作
  • 示例
  • 计算每月平均价格
  • 计算 30 天内的滚动平均值

将某些聚合阶段和操作符与 时间序列集合一起使用时,需要特别注意。

时间序列集合仅支持 $geoNear 聚合阶段,用于对针对 2 dsphere 索引的查询中的地理空间数据进行排序。您不能对时间序列集合使用 $near$nearSphere 操作符。

您不能使用 $merge 聚合阶段将另一个集合中的数据添加到时间序列集合中。

从 MongoDB 7.0 开始,您可以使用 $out 聚合阶段将文档写入时间序列集合。有关更多信息,请参阅将数据迁移到时序集合。

以下聚合管道操作符和阶段通常用于分析时间序列数据:

  • $dateAdd:向数据对象添加指定的时间量。

  • $dateDiff: 返回两个日期之间的时间差。

  • $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"
}
}
} ] )

该管道返回一组文档,其中每个文档包含特定股票的每月平均收盘价。

{
_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
}

后退

查询