Criar e consultar uma coleção de séries temporais
Nesta página
Esta página mostra como criar e consultar uma coleção de séries temporais com exemplos de código.
Crie uma coleção de séries temporais
Antes de poder 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.
timeseries
Campos de objetos
Ao criar uma coleção de séries temporais, especifique as seguintes opções:
Campo | Tipo | Descrição |
---|---|---|
| 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 |
| 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 |
| string | Opcional. Os valores possíveis são:
Por padrão, o MongoDB define Defina manualmente o parâmetro Se você especificar Se você não especificar |
| 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
Inserir medições em uma Coleção de séries temporais
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.
Consultar uma Coleta de Seqüência Temporal
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.
Execute agregações em uma Coleção de séries temporais
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 }