As coleções de séries temporais geralmente se comportam como coleções regulares com várias limitações.
Recursos Não Suportados
O MongoDB não oferece suporte aos seguintes recursos com coleções de séries temporais:
Observação
Não é possível usar coleções de séries temporais como origem para o Atlas Stream Processing. As coleções de séries temporais não aceitam change streams.
Aggregation $merge
Não é possível usar o estágio de aggregation de $merge para adicionar dados de outra coleção a uma coleção de séries temporais. Use o estágio de agregação $out para gravar documentos em uma coleção de séries temporais.
Você pode usar $merge para mover dados de uma coleção de séries temporais para outra coleção.
Comando distinto
Devido à estrutura de dados única das coleções de séries temporais, o MongoDB não pode indexá-las de forma eficiente para valores diferentes. Evite usar o comando distinct ou método assistente db.collection.distinct() em coleções de séries temporais. Em vez disso, use uma agregação $group para agrupar documentos por valores distintos.
Por exemplo, para consultar valores meta.type diferentes em documentos onde meta.project = 10, em vez de:
db.foo.distinct("meta.type", {"meta.project": 10})
Usar:
db.foo.createIndex({"meta.project":1, "meta.type":1}) db.foo.aggregate([{$match: {"meta.project": 10}}, {$group: {_id: "$meta.type"}}])
Isso funciona da seguinte maneira:
Criando um índice composto em
meta.projectemeta.typee é compatível com a agregação.O estágio
$matchfiltra documentos ondemeta.project = 10.O estágio
$groupusameta.typecomo a chave de grupo para gerar um documento por valor exclusivo.
Consultas geoespaciais
As coleções de séries temporais suportam apenas o $geoNear estágio de agregação para classificar dados geoespaciais de queries em relação aos 2 índices dsphere. Você não pode usar $near operadores e em coleções de séries temporais.$nearSphere
$geoNear
Não é possível usar o query campo para $geoNear em uma coleção de séries temporais.
Você deve especificar o campo key para $geoNear em uma coleção de séries temporais.
Tamanho do documento
O tamanho máximo dos documentos em uma coleção de séries temporais é 4 MB.
Intervalo de datas estendido
Se sua coleção de séries temporais contiver documentos com timeField carimbos de data/hora antes 1970-01-01T00:00:00.000Z ou depois 2038-01-19T03:14:07.000Z, crie um índice no timeField para otimizar as consultas.
Updates
Os comandos de atualização devem atender aos seguintes requisitos:
Você só pode combinar
metaFieldao valor do campo.Você só pode modificar o valor do campo
metaField.Seu documento de atualização só pode conter expressões de operador de atualização.
Seu comando de atualização não deve limitar o número de documentos a serem atualizados. Defina
multi: trueou use o métodoupdateMany().Seu comando de atualização não deve definir upsert: true.
Para excluir dados antigos automaticamente, configure a remoção automática (TTL).
Índices Secundários da Série Temporal
O MongoDB suporta parcialmente os seguintes índices em coleções de séries temporais:
Você só pode criar índices de múltiplas chaves no
metaField.Você só pode criar índices2d no
metaField.Você só pode criar índices esparsos no
metaField.
O MongoDB não oferece suporte para os seguintes tipos de índices em coleções de séries temporais:
Se houver coleções de séries temporais e você precisar fazer downgrade da versão de compatibilidade de recursos (FCV), primeiro descartará todos os índices secundários que são incompatíveis com o FCV rebaixado. Para mais informações, consulte setFeatureCompatibilityVersion.
Capped collections
Você não pode criar uma coleção de séries temporais como uma capped collection.
Modificação do Tipo de Coleção
Você só pode definir o tipo de collection ao criar uma collection:
Não é possível converter uma coleção existente em uma coleção de séries temporais.
Você não pode converter uma coleção de séries temporais em um tipo de coleção diferente.
Para mover dados de uma coleção existente para uma coleção de séries temporais, migre os dados para uma coleção de séries temporais.
Modificação do timeField e do metaField
Você só pode definir os parâmetros timeField e metaField de uma collection ao criá-la. Você não poderá modificar esses parâmetros posteriormente.
Granularidade
Tamanho do bucket
Para qualquer configuração de parâmetros de granularidade, o tamanho máximo de um bucket é de 1000 medições ou 125 KB de dados, o que for menor. O MongoDB também pode impor um tamanho máximo menor para dados de alta cardinalidade com muitos valores exclusivos, para que o conjunto de trabalho de buckets caiba no cache WiredTiger.
Modificando Parâmetros de Bucket
Depois de definir os parâmetros granularity ou agrupamento personalizado bucketMaxSpanSeconds e bucketRoundingSeconds de uma coleção, você pode aumentar o intervalo de tempo coberto por um bucket, mas não diminuí-lo. Utilize o comando collMod para modificar os parâmetros. Por exemplo:
db.runCommand({ collMod: "timeseries", timeseries: { bucketMaxSpanSeconds: 3600, bucketRoundingSeconds: 3600 } })
Observação
bucketMaxSpanSeconds e bucketRoundingSeconds deve ser igual. Se você modificar um parâmetro, você também deverá definir o outro para o mesmo valor.
Fragmentação
Coleções de séries temporais estão sujeitas a diversas limitações de fragmentação.
Comandos de Administração de Fragmentação
Não é possível executar comandos de administração de fragmentação em coleções de séries temporais fragmentadas.
Campos-Chave de Fragmento
Ao fragmentar coleções de série temporal, você só pode especificar os seguintes campos na chave de fragmento:
O
metaFieldSubcampos de
metaFieldO
timeField
Você pode especificar combinações desses campos na chave do fragmento. Nenhum outro campo, incluindo _id, é permitido no padrão da chave de fragmento.
Quando você especifica a chave de fragmento:
metaFieldpode ser um:timeFielddeve ser:Uma chave fragmentada de longo alcance
No final do padrão de chave de fragmento
Dica
Evite especificar apenas o timeField como a chave de fragmento. Como o timeField aumenta monotonicamente, isso pode fazer com que todas as gravações apareçam em um único bloco dentro do cluster. Idealmente, os dados são distribuídos uniformemente entre os blocos.
Para saber como escolher melhor uma chave de fragmento, consulte:
Aviso
A partir do MongoDB 8.0, as chaves de shard que contêm timeField ficaram obsoletas para coleções de séries temporais.
Refragmentação
A partir do MongoDB 8.0.10, você pode refragmentar uma coleção de séries temporais. Todos os shards na coleção de séries temporais devem executar a versão 8.0.10 ou posterior para serem refragmentados.
Para mais informações, consulte Refragmentar uma collection.
Fragmentação de zona
A fragmentação de zona não oferece suporte a coleções de séries temporais. O balanceador sempre distribui dados em coleções de séries temporais fragmentadas uniformemente entre todos os fragmentos no cluster.
Transações
Não é possível escrever em coleções de séries temporais em transações.
Observação
O MongoDB permite leituras de coleções de séries temporais em transações.
Visualizações
As coleções de séries temporais são visualizações não materializadas graváveis. As limitações das visualizações se aplicam às coleções de séries temporais.
Você não pode criar uma visualização a partir de um namespace de collection de série temporal (ou seja, uma collection prefixada com
system.buckets).
Isolamento de snapshot
As operações de leitura em coleções de séries temporais com preocupação de leitura "snapshot" garantem o isolamento do snapshot somente na ausência de operações simultâneas de remoção ou renomeação de coleções na operação de leitura. A recriação de uma coleção de séries temporais no mesmo namespace com configuração de granularidade diferente não produz isolamento total do snapshot.