Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Migrar dados para uma Coleção de séries temporais

Nesta página

  • Migrar dados para uma Coleção de séries temporais
  • (Opcional) Transforme seus dados para criar um campo de metadados se não existir. Este campo não é obrigatório.
  • Use a opção de série temporal com o estágio de agregação $out

Para migrar dados de uma coleção existente para uma coleção de séries temporais, use um estágio $out em seu aggregation pipeline.

Observação

Nas versões do MongoDB anteriores a 7.0.3, um aggregation pipeline não pode usar $out para gerar uma coleção de séries temporais. Para migrar dados para uma coleção de séries temporais com versões MongoDB anteriores a 7.0.3, use mongodump e mongorestore.

1

Se a coleção original não tiver um campo de metadados, utilize o estágio de agregação $addFields para adicioná-la.

Considere uma coleção com dados meteorológicos que usa o formato:

{
"_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 }
}

Os seguintes estágios do pipeline adicionam um campo metaData e usam $project para incluir ou excluir os campos restantes no documento:

{ $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

O exemplo abaixo utiliza o método auxiliar db.collection.aggregate(). Para a sintaxe de estágio de agregação, consulte $out. Para obter uma explicação completa das opções de séries temporais, consulte a Referência de campo de série temporal.

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
}
}, {
$out: {
db: "mydatabase",
coll: "weathernew",
timeseries: {
timeField: "ts",
metaField: "metaData"
}
}
}
])

Após executar este comando, você tem a coleção weathernew abaixo:

db.weathernew.findOne()
{
"_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 }
}

Se a sua coleção original tinha índices secundários, recrie-os manualmente agora. Se a sua coleção incluir timeField valores antes de 1970-01-01T00:00:00.000Z ou depois de 2038-01-19T03:14:07.000Z, o MongoDB registrará um aviso e desativará algumas otimizações de query que fazem uso do índice interno agrupado. Criar um índice secundário no timeField para recuperar o desempenho da query e resolver o aviso de log.

Dica

Veja também:

← Adicionar índices secundários às Coleções de séries temporais