Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Migrar datos a una colección de series temporales con agregación

A partir de la versión 7.0 de MongoDB, puedes utilizar el $out etapa 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 cuando se utiliza $out para migrar datos a una colección de series de tiempo. Para mantener el orden, ordena tus datos antes de migrarlos con un pipeline de agregación.

Considera una colección weatherdata que contenga 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
}
}
)
1

Si tu colección no incluye un campo que puedas utilizar para identificar cada serie, transforma tus datos para definir uno. En este ejemplo, el campo metaData se convierte en el metaField de la colección de series de tiempo que se crea.

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 $addFields para agregar un campo metaData a la colección weather_data.

  • Usa $project para incluir o excluir los campos restantes en el documento.

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
}
}
])
2

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 $out con la opción timeseries para crear una colección de series de tiempo weathernew en la base de datos mydatabase.

  • Define el campo metaData como el metaField de la colección weathernew.

  • Define el campo ts como el timeField de la colección weathernew.

    Nota

    El timeField de una colección de series de tiempo debe ser de tipo fecha.

{
$out: {
db: "mydatabase",
coll: "weathernew",
timeseries: {
timeField: "ts",
metaField: "metaData",
granularity: "seconds"
}
}
}

Para la sintaxis de la etapa de agregación, consulta $out. Para obtener una explicación completa de las opciones de series temporales, consulte la Referencia de campos de series temporales.

3

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.

Si tu colección original tenía índices secundarios, vuelve a crearlos manualmente ahora.

Si tu colección de series de tiempo incluye timeField valores antes de 1970-01-01T00:00:00.000Z o después de 2038-01-19T03:14:07.000Z, MongoDB registra una advertencia y desactiva algunas optimizaciones de query que hacen uso del índice clusterizado interno. Para recuperar el rendimiento de la query y resolver la advertencia de registro, crea un índice secundario en el timeField.

Tip

Volver

Migrar datos

En esta página