Algunas etapas y operadores de agregación requieren consideraciones especiales cuando se utilizan con colecciones de series temporales.
$geoNear
Las colecciones de series temporales solo admiten la $geoNearEtapa de agregación para ordenar datos geoespaciales de consultas 2 basadas en índices dsphere. No se pueden usar los $near $nearSphere operadores y en colecciones de series temporales.
No se puede utilizar el query campo para $geoNear en una colección de series de tiempo.
Debe especificar el campo key para $geoNear en una colección de series de tiempo.
$merge
No se puede utilizar la $merge etapa de agregación para agregar datos de otra colección a una colección de series de tiempo.
$out
A partir de MongoDB,7.0 puede usar la $out etapa de agregación para escribir documentos en una colección de series temporales. Para obtener más información, consulte Migrar datos a una colección de series temporales.
Operaciones de uso frecuente
Los siguientes operadores y etapas de canalización de agregación se utilizan a menudo para analizar datos de series temporales:
$dateAdd:Agrega una cantidad de tiempo específica a un objeto de fecha.$dateDiff:Devuelve la diferencia horaria entre dos fechas.$dateTrunc:Devuelve una fecha que se ha truncado a la unidad específica.$setWindowFields:Ejecuta cálculos en documentos en una ventana determinada.
Ejemplos
Calcular precio promedio por mes
Considere una colección dowJonesTickerData que contiene documentos con la siguiente estructura:
{ 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 }
Esta canalización de agregación realiza las siguientes acciones:
Utiliza para truncar el de cada
$dateTruncdocumentodateal mes apropiado.Utiliza
$grouppara agrupar los documentos por mes y símbolo.Utiliza para calcular el precio promedio por
$avgmes.
db.dowJonesTickerData.aggregate( [ { $group: { _id: { firstDayOfMonth: { $dateTrunc: { date: "$date", unit: "month" } }, symbol: "$symbol" }, avgMonthClose: { $avg: "$close" } } } ] )
La pipeline devuelve un conjunto de documentos donde cada documento contiene el precio de cierre promedio por mes de una acción determinada.
{ _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 un promedio móvil durante 30 días
Considere una colección dowJonesTickerData que contiene documentos con la siguiente estructura:
{ 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 }
Esta canalización de agregación realiza las siguientes operaciones:
Utiliza para especificar una ventana
$setWindowFieldsde 30 días.Calcula un promedio móvil del precio de cierre durante los últimos 30 días para cada acción.
db.dowJonesTickerData.aggregate( [ { $setWindowFields: { partitionBy: { symbol : "$symbol" } , sortBy: { date: 1 }, output: { averageMonthClosingPrice: { $avg : "$close", window : { range : [-1, "current"], unit : "month" } } } } } ] )
El pipeline devuelve un conjunto de documentos donde cada documento incluye un campo $averageMonthClosingPrice que contiene el promedio del precio de cierre del mes anterior para ese símbolo de acciones.
{ 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 }