Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

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

Nesta página

  • Sobre esta tarefa
  • Antes de começar
  • Passos
  • Opcional. Crie um campo de metadados.
  • Crie sua coleção de séries temporais e insira seus dados.
  • Próximos passos

Esta página descreve como migrar dados para uma coleção de séries temporais usando um pipeline de agregação. Como alternativa, para aprender a migrar dados para uma coleção de séries temporais usando o MongoDB Relational Migrator, consulte Configurar uma coleção de time series com o Relational Migrator.

A partir da versão 7.0 do MongoDB, você pode usar o estágio de agregação $out para migrar dados de uma coleção existente para uma coleção de séries temporais. Se sua coleção armazenar dados que você deseja comparar entre intervalos de tempo, use uma coleção de séries temporais para melhorar o desempenho e o armazenamento. Para obter mais informações sobre os benefícios das coleções de séries temporais, consulte Coleções de séries temporais.

Considere uma coleção weatherdata que contém informações de tempo e metadados:

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

Se sua coleção não incluir um campo específico que contenha todos os metadados, transforme seus dados para definir um.

Os seguintes estágios do pipeline adicionam um campo metaData e usam $project para incluir ou excluir os campos restantes no documento. Neste exemplo, o campo metaData se torna o metaField da coleção de séries temporais que você cria.

Observação

Escolher o campo certo como seu metaField de série temporal otimiza o desempenho do armazenamento e da query. Para obter mais informações sobre seleção de metaField e práticas recomendadas, consulte metaFields.

{ $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 executa as seguintes operações:

  • Usa o estágio de agregação $addFields para adicionar um campo metaData à sua coleção weather_data.

  • Usa o estágio de agregação $out com a opção timeseries para criar uma coleção de séries temporais weathernew no banco de dados mydatabase.

  • Define o metaField da sua coleção weathernew como o campo metaData.

  • Define o timeField da sua coleção weathernew como o campo ts.

Observação

O timeField de uma coleção de séries temporais deve ser um tipo de data.

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

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.

Depois de executar esse pipeline de agregação, você pode usar findOne() para visualizar um documento em sua coleção de séries temporais weathernew:

db.weathernew.findOne()

A operação retorna o seguinte 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 }
}

Se a sua coleção original tinha índices secundários, recrie-os manualmente agora.

Se sua coleção de séries temporais incluir valores timeField antes de 1970-01-01T00:00:00.000Z ou depois de 2038-01-19T03:14:07.000Z, o MongoDB registrará um aviso e desabilitará algumas otimizações de consulta que fazem uso do índice clusterizado interno. Para recuperar o desempenho da consulta e resolver o aviso de log, crie um índice secundário em timeField.

Dica

Veja também:

Voltar

Definir granularidade