A partir de la versión 7.0 de MongoDB, puedes usar el $outetapa de agregación para migrar datos de una colección existente a una colección de series de tiempo.
Nota
MongoDB no garantiza el orden de salida al usar para migrar datos a una colección de series temporales. Para mantener el orden, ordene los datos antes de migrar con una canalización de $out agregación.
Antes de comenzar
Considere una colección weatherdata que contiene información de tiempo y metadatos:
db.weatherdata.insertOne( { _id: ObjectId("5553a998e4b02cf7151190b8"), st: "x+47600-047900", ts: ISODate("1984-03-05T13:00:00Z"), position: { type: "Point", coordinates: [ -47.9, 47.6 ] }, elevation: 9999, callLetters: "VCSZ", qualityControlProcess: "V020", dataSource: "4", type: "FM-13", airTemperature: { value: -3.1, quality: "1" }, dewPoint: { value: 999.9, quality : "9" }, pressure: { value: 1015.3, quality: "1" }, wind: { direction: { angle: 999, quality: "9" }, type: "9", speed: { rate: 999.9, quality: "9" } }, visibility: { distance: { value: 999999, quality : "9" }, variability: { value: "N", quality: "9" } }, skyCondition: { ceilingHeight: { value: 99999, quality: "9", determination: "9" }, cavok: "N" }, sections: [ "AG1" ], precipitationEstimatedObservation: { discrepancy: "2", estimatedWaterDepth: 999 } } )
Pasos
Crear un campo de metadatos.
Si su colección no incluye un campo que permita identificar cada serie, transforme sus datos para definir uno. En este ejemplo, el campo metaData se convierte en el metaField de la colección de series temporales que cree.
Nota
Elegir el campo correcto como serie temporal metaField y granularity optimiza tanto el almacenamiento como el rendimiento de las consultas. Para obtener más información sobre la selección de campos y las prácticas recomendadas, consulte las prácticas recomendadas de metaField y granularidad.
La siguiente pipeline realiza las siguientes operaciones:
Utiliza para agregar
$addFieldsunmetaDatacampo a laweather_datacolección.Utiliza para incluir o excluir los campos restantes en el
$projectdocumento.
db.weather_data.aggregate([ { $addFields: { metaData: { "st": "$st", "position": "$position", "elevation": "$elevation", "callLetters": "$callLetters", "qualityControlProcess": "$qualityControlProcess", "type": "$type" } }, }, { $project: { _id: 1, ts: 1, metaData: 1, dataSource: 1, airTemperature: 1, dewPoint: 1, pressure: 1, wind: 1, visibility: 1, skyCondition: 1, sections: 1, precipitationEstimatedObservation: 1 } } ])
Crea tu colección de series de tiempo e inserta tus datos.
Agregue una $out etapa de agregación a su pipeline para crear una colección de series temporales e insertar sus datos en ella. El pipeline a continuación realiza las siguientes operaciones:
Utiliza con
$outlatimeseriesopción para crear unaweathernewcolección de series de tiempo en lamydatabasebase de datos.Define el campo
metaDatacomo elmetaFieldde la colecciónweathernew.Define el campo
tscomo eltimeFieldde la colecciónweathernew.
{ $out: { db: "mydatabase", coll: "weathernew", timeseries: { timeField: "ts", metaField: "metaData", granularity: "seconds" } } }
Para la sintaxis de la etapa de agregación,$out consulte. Para una explicación completa de las opciones de series temporales, consulte la Referencia de campos de series temporales.
Revise sus datos.
Después de ejecutar esta secuencia de agregación, puede usar para ver un documento en findOne() su weathernew colección de series de tiempo:
db.weathernew.findOne()
La operación devuelve el siguiente documento:
{ _id: ObjectId("5553a998e4b02cf7151190b8"), ts: ISODate("1984-03-05T13:00:00Z"), metaData: { st: "x+47600-047900", position: { type: "Point", coordinates: [ -47.9, 47.6 ] }, elevation: 9999, callLetters: "VCSZ", qualityControlProcess: "V020", type: "FM-13" }, dataSource: "4", airTemperature: { value: -3.1, quality: "1" }, dewPoint: { value: 999.9, quality: "9" }, pressure: { value: 1015.3, quality: "1" }, wind: { direction: { angle: 999, quality: "9" }, type: "9", speed: { rate: 999.9, quality: "9" } }, visibility: { distance: { value: 999999, quality: "9" }, variability: { value: "N", quality: "9" } }, skyCondition: { ceilingHeight: { value: 99999, quality: "9", determination: "9" }, cavok: "N" }, sections: [ "AG1" ], precipitationEstimatedObservation: { discrepancy: "2", estimatedWaterDepth: 999 } }
Para obtener más información sobre consideraciones adicionales para migrar sus datos,consulte Mejores prácticas para colecciones de series de tiempo.
Próximos pasos
Si tu colección original tenía índices secundarios, vuelve a crearlos manualmente ahora.
Si su colección de series temporales incluye timeField valores antes 1970-01-01T00:00:00.000Z de o después 2038-01-19T03:14:07.000Z de, MongoDB registra una advertencia y deshabilita algunas optimizaciones de consultas que utilizan el índice agrupado interno. Para recuperar el rendimiento de las consultas y resolver la advertencia del registro, cree un índice secundario timeFielden.