Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Considerações sobre aggregations e operadores

Nesta página

  • $geoNear
  • $merge
  • $out
  • Operações usadas com frequência
  • Exemplos
  • Calcular o preço médio por mês
  • Calcular uma média contínua ao longo de 30 dias

Alguns estágios e operadores de agregação exigem considerações especiais quando você os usa com coleções de séries temporais.

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.

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.

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.

Os seguintes operadores e estágios de pipeline de agregação são frequentemente usados para analisar dados de time series:

  • $dateAddAdiciona 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.

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 o date 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
}

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
}

Voltar

Query