Considerações sobre aggregations e operadores
Nesta página
Alguns estágios e operadores de agregação exigem considerações especiais quando você os usa com coleções de séries temporais.
$geoNear
As coleções de séries temporais são compatíveis apenas com o estágio de agregação $geoNear
para classificar dados geoespaciais de queries com base em índices 2dsphere. Você não pode usar os operadores $near
e $nearSphere
em coleções de séries temporais.
$merge
Não é possível usar o estágio de aggregation de $merge
para adicionar dados de outra collection a uma coleção de séries temporais.
$out
A partir do MongoDB 7.0, você pode usar o estágio de agregação $out
para gravar documentos em uma coleção de séries temporais. Para obter mais informações, consulte Migrar dados para uma coleção de séries temporais.
Operações usadas com frequência
Os seguintes operadores e estágios de pipeline de agregação são frequentemente usados para analisar dados de time series:
$dateAdd
Adiciona uma quantidade específica de tempo a um objeto Date.$dateDiff
: retorna a diferença de tempo entre duas datas.$dateTrunc
: retorna uma data que foi truncada para a unidade específica.$setWindowFields
: Executa cálculos em documentos em uma determinada janela.
Exemplos
Calcular o preço médio por mês
Considere uma coleção dowJonesTickerData
que contém documentos com a seguinte estrutura:
{ 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 }
Este pipeline de agregação executa as seguintes ações:
Usa
$dateTrunc
para truncar odate
de cada documento para o mês apropriado.Usa
$group
para agrupar os documentos por mês e símbolo.Usa
$avg
para calcular o preço médio por mês.
db.dowJonesTickerData.aggregate( [ { $group: { _id: { firstDayOfMonth: { $dateTrunc: { date: "$date", unit: "month" } }, symbol: "$symbol" }, avgMonthClose: { $avg: "$close" } } } ] )
O pipeline retorna um conjunto de documentos em que cada documento contém o preço médio de fechamento por mês para determinadas ações.
{ _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 }
Calcular uma média contínua ao longo de 30 dias
Considere uma coleção dowJonesTickerData
que contém documentos com a seguinte estrutura:
{ 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 }
Esse pipeline de agregação executa as seguintes operações:
Usa
$setWindowFields
para especificar uma janela de 30 dias.Calcula uma média móvel do preço de fechamento nos últimos 30 dias para cada ação.
db.dowJonesTickerData.aggregate( [ { $setWindowFields: { partitionBy: { symbol : "$symbol" } , sortBy: { date: 1 }, output: { averageMonthClosingPrice: { $avg : "$close", window : { range : [-1, "current"], unit : "month" } } } } } ] )
O pipeline retorna um conjunto de documentos em que cada documento inclui um campo $averageMonthClosingPrice
que contém a média do preço de fechamento do mês anterior para esse símbolo de ação.
{ 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 }