Esta página describe las limitaciones en el uso colecciones de series temporales.
Funciones no compatibles
Las siguientes funciones no son compatibles con las recopilaciones de series temporales:
La compatibilidad deAtlas Device Sync está limitada a las recopilaciones de series temporales que utilizan Atlas Data Ingest.
Agregación $out y $merge
No se pueden utilizar las etapas de $out canalización de agregación o para agregar datos de otra colección a una colección de series de tiempo.$merge
Comando distinct
Debido a la estructura de datos única de las colecciones de series temporales, MongoDB no puede indexarlas eficientemente para valores distintos. Evite usar el distinct comando o db.collection.distinct() el método auxiliar en colecciones de series temporales. En su lugar, utilice una $group agregación para agrupar documentos por valores distintos.
Por ejemplo, para query valores meta.type distintos en documentos donde meta.project = 10, en lugar de:
db.foo.distinct("meta.type", {"meta.project": 10})
Uso:
db.foo.createIndex({"meta.project":1, "meta.type":1}) db.foo.aggregate([{$match: {"meta.project": 10}}, {$group: {_id: "$meta.type"}}])
Esto funciona de la siguiente manera:
Tamaño del documento
El tamaño máximo de los documentos dentro de una colección de series de tiempo es 4 MB.
Actualizaciones y eliminaciones
A partir de MongoDB 5.1, puede realizar algunas operaciones de eliminación y actualización.
Los comandos de eliminación deben cumplir los siguientes requisitos:
Solo se puede realizar una búsqueda por valores de campo de metaField.
El comando de eliminación no debe limitar la cantidad de documentos que se eliminarán. Configure
justOne: falseo utilice eldeleteMany()método.
Si una colección de series temporales contiene documentos con marcas de timeField tiempo anteriores a 1970-01-01T00:00:00.000Z o posteriores a,2038-01-19T03:14:07.000Z la función TTL "tiempo de vida" no elimina ningún documento de la colección.
Para obtener detalles sobre las eliminaciones de TTL, consulte Hacer caducar datos de colecciones configurando TTL.
Los comandos de actualización deben cumplir con los siguientes requisitos:
Solo puedes hacer coincidir el valor del campo
metaField.Solo puedes modificar el valor del campo
metaField.El documento de actualización solo puede contener expresiones de operador de actualización.
El comando de actualización no debe limitar el número de documentos que se actualizarán. Configure
multi: trueo utilice elupdateMany()método.El comando de actualización no debe establecer inserción: true.
En MongoDB 5.0, las colecciones de series temporales solo admiten operaciones de inserción y consultas de lectura. Las actualizaciones y las operaciones de eliminación manual generan un error.
Para eliminar automáticamente los datos antiguos, configure la eliminación automática (TTL).
Para eliminar todos los documentos de una colección, utilice el método para eliminar la drop() colección.
Índices secundarios de series temporales
Hay soporte mejorado para índices secundarios en MongoDB 6.0.
Índices secundarios de series temporales con MongoDB 6.0 y versiones posteriores
A partir de MongoDB,6.0 puede agregar un índice secundario a cualquier campo.
Estos tipos de índice no son compatibles:
La propiedad de índice TTL no es compatible. Para eliminar TTL, utilice expireAfterSeconds.
Los siguientes tipos de índice solo se pueden crear en metaField:
Para conocer las mejoras en los índices secundarios de series de tiempo disponibles a partir de MongoDB,6.0 consulte Índices secundarios de series de tiempo en MongoDB.6.0
Si existen índices secundarios en colecciones de series temporales y necesita degradar la versión de compatibilidad de características (FCV), primero debe eliminar los índices secundarios incompatibles con la FCV degradada. Para obtener más información,setFeatureCompatibilityVersion consulte.
Índices secundarios de series temporales con MongoDB 5.0 y anteriores
En MongoDB 5.0 y versiones anteriores:
El
metaFieldpuede tener índices secundarios.El
timeFieldpuede tener índices secundarios.Si
metaFieldes un documento, puede agregar índices secundarios en los campos dentro del documento.
Tip
Colecciones con tamaño fijo
No es posible crear una colección de series temporales como una colección limitada.
Modificación del tipo de colección
Solo puedes establecer el tipo de colección cuando creas una colección:
Una colección existente no se puede convertir en una colección de series de tiempo.
Una colección de series temporales no se puede convertir en un tipo de colección diferente.
Para mover datos de una colección existente a una colección de series de tiempo, migre los datos a una colección de series de tiempo.
Modificación de timeField y metaField
Solo se pueden configurar los parámetros timeField y metaField de una colección al crearla. No se pueden modificar posteriormente.
Modificación de granularity
Después de configurar el granularity, solo se puede aumentar un nivel a la vez. El granularity puede cambiar de "seconds" a "minutes" o de "minutes" a "hours". No se permiten otros cambios.
Para cambiar granularity de "seconds" a "hours", primero aumente granularity a "minutes" y luego a "hours".
particionado
A partir de MongoDB 5.1 (y 5.0.6), puede crear colecciones de series de tiempo fragmentadas.
En versiones anteriores a MongoDB 5.0.6, no es posible fragmentar colecciones de series temporales.
Comandos de administración de fragmentación
No es posible ejecutar comandos de administración de fragmentación en colecciones de series de tiempo fragmentadas.
Campos de clave de fragmento
Al fragmentar colecciones de series temporales, solo puede especificar los siguientes campos en la clave de fragmentación:
El
metaFieldSubcampos de
metaFieldEl
timeField
Puede especificar combinaciones de estos campos en la clave de fragmento. No se permiten otros campos, incluido _id, en el patrón de la clave de fragmento.
Cuando se especifica la clave del fragmento:
metaFieldPuede ser cualquiera de los dos:timeFielddebe ser:Al final del patrón de clave de fragmento
Tip
Evite especificar solo timeField como clave de fragmento. Dado que timeField aumenta de forma monótona, es posible que todas las escrituras aparezcan en un solo fragmento dentro del clúster. Idealmente, los datos se distribuyen uniformemente entre los fragmentos.
Para saber cómo elegir mejor una clave de fragmento, consulte:
Redistribución
No puede cambiar el particionado de una colección de series de tiempo particionada. Sin embargo, puede refinar su clave de partición.
Partición por zonas
La partición por zonas no admite colecciones de series de tiempo. El balanceador siempre distribuye los datos en colecciones de series de tiempo fragmentadas de manera uniforme en todos los fragmentos del clúster.
Transacciones
No se puede escribir en colecciones de series temporales en transacciones.
Nota
Las lecturas de colecciones de series temporales se admiten en las transacciones.
Ver limitaciones
Las colecciones de series de tiempo son vistas no materializadas que se pueden escribir. Las limitaciones para las vistas se aplican a las colecciones de series de tiempo.
No se puede crear una vista desde un espacio de nombres de colección de buckets de series de tiempo (es decir, una colección con el prefijo
system.buckets).
Aislamiento de snapshot
Las operaciones de lectura en colecciones de series temporales con la preocupación de lectura "snapshot" garantizan el aislamiento de instantáneas solo si no se realizan operaciones simultáneas de eliminación o cambio de nombre en las colecciones durante la operación de lectura. Recrear una colección de series temporales en el mismo espacio de nombres con una configuración de granularidad diferente no proporciona un aislamiento completo de instantáneas.