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

Criar e consultar uma coleção de séries temporais

Nesta página

  • Crie uma coleção de séries temporais
  • Inserir medições em uma Coleção de séries temporais
  • Consultar uma Coleta de Seqüência Temporal
  • Execute agregações em uma Coleção de séries temporais

Esta página mostra como criar e consultar uma coleção de séries temporais com exemplos de código.

Antes de inserir dados em uma coleção de séries temporais, você deve criar explicitamente a coleção usando o método db.createCollection() ou o comando create :

db.createCollection(
"weather",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "hours"
}
}
)

Observação

Versão de compatibilidade de recursos

Só é possível criar coleções de séries temporais em um sistema com featureCompatibilityVersion definido como 5.0 ou superior.

Ao criar uma coleção de séries temporais, especifique as seguintes opções:

Campo
Tipo
Descrição
timeseries.timeField
string

Obrigatório. O nome do campo que contém a data em cada documento da série temporal. Os documentos em uma collection de séries temporais devem ter uma data BSON válida como o valor do timeField.

timeseries.metaField
string

Opcional. O nome do campo que contém metadados em cada documento de série temporal. Os metadados no campo especificado devem ser dados utilizados para rotular uma série exclusiva de documentos. Os metadados devem mudar raramente ou nunca.

O nome do campo especificado não pode ser _id ou o mesmo que o timeseries.timeField. O campo pode ser de qualquer tipo.

timeseries.granularity
string

Opcional. Os valores possíveis são:

  • "seconds"

  • "minutes"

  • "hours"

Por padrão, o MongoDB define granularity como "seconds" para ingestão de alta frequência.

Defina manualmente o parâmetro granularity para melhorar o desempenho, otimizando a forma como os dados da collection de séries temporais são armazenados internamente. Para selecionar um valor para granularity, escolha a correspondência mais próxima do período entre as medições de entrada consecutivas.

Se você especificar timeseries.metaField, considere o período entre as medições de entrada consecutivas que têm o mesmo valor único para o campo metaField. As medições muitas vezes têm o mesmo valor exclusivo para o campo metaField se forem da mesma origem.

Se você não especificar timeseries.metaField, considere o período entre todas as medições inseridas na collection.

expireAfterSeconds
número
Opcional. Ative a exclusão automática de documento em uma time-series collection especificando o número de segundos após os quais os documento expiram. O MongoDB exclui documentos expirados automaticamente. Consulte Configurar remoção automática para coleção de séries temporais (TTL) para obter mais informações.

Outras opções permitidas com a opção timeseries são:

  • storageEngine

  • indexOptionDefaults

  • collation

  • writeConcern

  • comment

Dica

Consulte:

Cada documento inserido deve conter uma única medida. Para inserir vários documentos de uma só vez, emita o seguinte 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 inserir um único documento, use o método db.collection.insertOne().

Dica

Otimize o desempenho da inserção

Para saber como otimizar inserções para grandes operações, consulte Otimizar inserções.

Você pode consultar uma coleção de séries temporais da mesma forma que consultaria uma coleção padrão do MongoDB.

Para retornar um documento de uma coleção de séries temporais, execute:

db.weather.findOne({
"timestamp": ISODate("2021-05-18T00:00:00.000Z")
})

Saída de exemplo:

{
timestamp: ISODate("2021-05-18T00:00:00.000Z"),
metadata: { sensorId: 5578, type: 'temperature' },
temp: 12,
_id: ObjectId("62f11bbf1e52f124b84479ad")
}

Para obter mais informações sobre queries de séries temporais, consulte Otimizar o desempenho de query.

Para funcionalidade de query adicional, use um aggregation pipeline 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" }
}
}
] )

O exemplo de aggregation pipeline grupos todos os documentos pela data da medição e, em seguida, retorna a média de todas as medições de temperatura daquele dia:

{
"_id" : {
"date" : {
"year" : 2021,
"month" : 5,
"day" : 18
}
},
"avgTmp" : 12.714285714285714
}
{
"_id" : {
"date" : {
"year" : 2021,
"month" : 5,
"day" : 19
}
},
"avgTmp" : 13
}

Voltar

Séries temporais