Quando você cria uma coleção de séries temporais, o MongoDB agrupa automaticamente os dados de série temporal recebidos em buckets. Ao definir a granularidade, você controla a frequência com que os dados são agrupados com base na taxa de ingestão dos dados.
A partir do MongoDB 6.3, você pode usar os parâmetros personalizados de agrupamento bucketMaxSpanSeconds e bucketRoundingSeconds para especificar os limites do bucket e controlar com mais precisão como os dados de séries temporais são agrupados.
Para obter mais informações sobre agrupamento, consulte Sobre dados de séries temporais.
Observação
Você deve estar executando o MongoDB 5.0.1 ou posterior para alterar a granularidade de uma coleção de séries temporais após a criação da coleção.
Recuperar os parâmetros de bucketing atuais
Para recuperar valores de collections atuais, use o comando listCollections:
db.runCommand( { listCollections: 1 } )
Para coleções de séries temporais, a saída contém parâmetros granularity, bucketMaxSpanSeconds e bucketRoundingSeconds, se presente.
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { timeField: <string>, metaField: <string>, granularity: <string>, bucketMaxSpanSeconds: <number>, bucketRoundingSeconds: <number> } }, ... }, ... ] } }
Defina o parâmetro de "granularidade"
O exemplo a seguir define o granularity de uma coleção weather24h como minutes:
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" }, expireAfterSeconds: 86400 } )
Como usar parâmetros de bucketing personalizados
No MongoDB 6.3 e posterior, em vez de granularity, você pode definir os limites dos buckets manualmente usando os dois parâmetros de buckets personalizados. Considere essa abordagem se você espera consultar dados para intervalos de tempo fixos, como a cada 4 horas a partir da meia-noite. Garantir que os buckets não se sobreponham entre esses períodos otimiza o alto volume de consultas e operações insert.
Para utilizar parâmetros de bucket personalizados, defina ambos os parâmetros para o mesmo valor e não configure granularity:
bucketMaxSpanSecondsDefine o tempo máximo entre os carimbos de data/hora no mesmo bucket. Os valores possíveis são 1-31536000.bucketRoundingSecondsDefine o intervalo de tempo que determina o carimbo de data/hora inicial para um novo bucket. Quando um documento requer um novo bucket, o MongoDB arredonda para baixo o valor do carimbo de data/hora do documento por esse intervalo para definir o tempo mínimo para o bucket.
Para o exemplo da estação meteorológica, se você gerar relatórios de resumo a cada 4 horas, poderá ajustar o bucketing definindo os parâmetros de bucketing personalizados em 14400 segundos em vez de usar granularity de "minutes":
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", bucketMaxSpanSeconds: 14400, bucketRoundingSeconds: 14400 } } )
Se um documento com um tempo de 2023-03-27T16:24:35Z não se encaixa em um bloco existente, o MongoDB cria um novo bloco com um mínimo de tempo de 2023-03-27T16:00:00Z e um tempo máximo de 2023-03-27T19:59:59Z.
Alterar granularidade da série temporal
Você pode aumentar o timeseries.granularity de uma unidade de tempo mais curta para uma mais longa utilizando um comando collMod.
db.runCommand( { collMod: "weather24h", timeseries: { granularity: "seconds" | "minutes" | "hours" } } )
Se você estiver usando os parâmetros de bucketing personalizados bucketRoundingSeconds e bucketMaxSpanSeconds em vez de granularity, inclua ambos os parâmetros personalizados no comando collMod e defina-os com o mesmo valor:
db.runCommand( { collMod: "weather24h", timeseries: { bucketRoundingSeconds: 86400, bucketMaxSpanSeconds: 86400 } } )
Você não pode diminuir o intervalo de granularidade ou os valores de agrupamento personalizados.
Observação
Para modificar a granularidade de uma coleção de séries temporais compartilhada, você deve estar executando MongoDB 6.0 ou posterior.