Docs Menu
Docs Home
/
Manual de base de datos
/

Crear y ejecutar un query en una colección de series de tiempo

Esta página muestra cómo crear y consultar una colección de series de tiempo con ejemplos de código.

Antes de poder insertar datos en una colección de series de tiempo, debe crear explícitamente la colección utilizando el db.createCollection()Método o el create comando:

db.createCollection(
"weather",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "hours"
}
}
)

Nota

Compatibilidad de características entre versiones

Solo puedes crear colecciones de series de tiempo en un sistema con featureCompatibilityVersion configurado en 5.0 o superior.

Al crear una colección de series temporales, especifique las siguientes opciones:

Campo
Tipo
Descripción

timeseries.timeField

string

Requerido. El nombre del campo que contiene la fecha en cada documento de serie de tiempo. Los documentos en una colección de series de tiempo deben tener una fecha BSON válida como valor para el timeField.

timeseries.metaField

string

Opcional. El nombre del campo que contiene metadatos en cada documento de serie de tiempo. Los metadatos en el campo especificado deben ser datos utilizados para etiquetar una serie única de documentos. Los metadatos deberían cambiar rara vez, o nunca.

El nombre del campo especificado no puede ser _id ni igual a timeseries.timeField. El campo puede ser de cualquier tipo.

timeseries.granularity

string

Opcional. Los valores posibles son:

  • "seconds"

  • "minutes"

  • "hours"

De forma predeterminada, MongoDB establece granularity en "seconds" para la ingestión de alta frecuencia.

Configure manualmente el parámetro granularity para mejorar el rendimiento optimizando el almacenamiento interno de los datos de la colección de series temporales. Para seleccionar un valor para granularity, elija la coincidencia más cercana al intervalo de tiempo entre mediciones entrantes consecutivas.

Si especifica timeseries.metaField, considere el intervalo de tiempo entre mediciones entrantes consecutivas que tengan el mismo valor único en el campo metaField. Las mediciones suelen tener el mismo valor único en el campo metaField si provienen de la misma fuente.

Si no especificas timeseries.metaField, considera el intervalo de tiempo entre todas las mediciones que se insertan en la colección.

expireAfterSeconds

Número

Opcional. Habilita la eliminación automática de documentos en una colección de series de tiempo especificando el número de segundos después de los cuales los documentos expirarán. MongoDB borra automáticamente los documentos caducados. Consulta Configura la Eliminación Automática para Colecciones de Series de Tiempo (TTL) para obtener más información.

Otras opciones permitidas con la opción timeseries son:

  • storageEngine

  • indexOptionDefaults

  • collation

  • writeConcern

  • comment

Tip

Consulte:

Cada documento que inserte debe contener una sola medida. Para insertar varios documentos a la vez, ejecute el siguiente comando:

db.weather.insertMany( [
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T00:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T04:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T08:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T12:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T16:00:00.000Z"),
"temp": 16
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T20:00:00.000Z"),
"temp": 15
}, {
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T00:00:00.000Z"),
"temp": 13
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T04:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T08:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T12:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T16:00:00.000Z"),
"temp": 17
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T20:00:00.000Z"),
"temp": 12
}
] )

Para insertar un solo documento, utiliza el método db.collection.insertOne().

Tip

Optimiza el rendimiento de inserción

Para saber cómo optimizar insertos para operaciones grandes, consulte Optimizar insertos.

Puede consultar una colección de series de tiempo de la misma manera que consultaría una colección MongoDB estándar.

Para devolver un documento de una colección de series de tiempo, ejecute:

db.weather.findOne({
"timestamp": ISODate("2021-05-18T00:00:00.000Z")
})

Ejemplo de salida:

{
timestamp: ISODate("2021-05-18T00:00:00.000Z"),
metadata: { sensorId: 5578, type: 'temperature' },
temp: 12,
_id: ObjectId("62f11bbf1e52f124b84479ad")
}

Para obtener más información sobre las consultas de series de tiempo,consulte Optimizar el rendimiento de las consultas.

Para obtener una funcionalidad de consulta adicional, utilice una canalización de agregación como:

db.weather.aggregate( [
{
$project: {
date: {
$dateToParts: { date: "$timestamp" }
},
temp: 1
}
},
{
$group: {
_id: {
date: {
year: "$date.year",
month: "$date.month",
day: "$date.day"
}
},
avgTmp: { $avg: "$temp" }
}
}
] )

La canalización de agregación de ejemplo agrupa todos los documentos por la fecha de la medición y luego devuelve el promedio de todas las mediciones de temperatura de ese día:

{
"_id" : {
"date" : {
"year" : 2021,
"month" : 5,
"day" : 18
}
},
"avgTmp" : 12.714285714285714
}
{
"_id" : {
"date" : {
"year" : 2021,
"month" : 5,
"day" : 19
}
},
"avgTmp" : 13
}

Volver

Time Series

En esta página