Esta página muestra cómo crear y consultar una colección de series de tiempo con ejemplos de código.
Crear una colección de series de tiempo
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.
timeseries Campos de objeto
Al crear una colección de series temporales, especifique las siguientes opciones:
Campo | Tipo | Descripción |
|---|---|---|
| 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 |
| 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 |
| string | Opcional. Los valores posibles son:
De forma predeterminada, MongoDB establece Configure manualmente el parámetro Si especifica Si no especificas |
| 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:
storageEngineindexOptionDefaultscollationwriteConcerncomment
Inserta medidas en una colección de series de tiempo
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.
Realiza queries a una colección de series de tiempo
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.
Ejecuta agregaciones en una colección de series de tiempo
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 }