Docs Menu
Docs Home
/ /

Consideraciones sobre agregación y operadores

Algunas etapas y operadores de agregación requieren consideraciones especiales cuando se utilizan con colecciones de series temporales.

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.

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.

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.

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.

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 $dateTrunc documento date al mes apropiado.

  • Utiliza $group para agrupar los documentos por mes y símbolo.

  • Utiliza para calcular el precio promedio por $avg mes.

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
}

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 $setWindowFields de 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
}

Volver

Query

En esta página