Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
Referencia

Limitaciones de la colección de series de tiempo

Esta página describe las limitaciones del uso de colecciones de series de tiempo.

Las siguientes funcionalidades no son compatibles con las colecciones de series de tiempo:

El Atlas Device Sync se limita a las colecciones de series temporales que utilizan Atlas Data Ingest.

No se puede usar las $out ni las $merge para agregar datos de otra colección a una colección de series de tiempo.

Debido a la estructura única de datos de las colecciones de series temporales, MongoDB no puede indexarlas eficientemente para valores distintos. Evite utilizar el comando distinct o el método asistente db.collection.distinct() en colecciones de series temporales. En su lugar, use 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:

  1. Creando un índice compuesto en meta.project y meta.type y admite la agregación.

  2. La etapa $match filtra los documentos en los que meta.project = 10.

  3. La etapa $group utiliza meta.type como la clave de grupo para generar un documento por cada valor único.

El tamaño máximo de los documentos dentro de una colección de series de tiempo es 4 MB.

A partir de MongoDB 5.1, puedes realizar algunas operaciones de eliminación y actualización.

Los comandos de borrar deben cumplir los siguientes requisitos:

  • Solo se puede realizar una búsqueda por valores de campo de metaField.

  • El comando para eliminar no debe limitar el número de documentos que se deben eliminar. Establecer justOne: false o utilizar el método deleteMany().

Si una colección de series de tiempo contiene documentos con marcas de tiempo timeField antes de 1970-01-01T00:00:00.000Z o después de 2038-01-19T03:14:07.000Z, ningún documento se elimina de la colección por la funcionalidad TTL "tiempo de vida".

Para más detalles sobre eliminaciones TTL, consulta Expirar datos de colecciones estableciendo 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.

  • Tu comando de actualización no debe limitar la cantidad de documentos a actualizar. Establecer multi: true o utilizar el método updateMany().

  • El comando de actualización no debe establecer inserción: true.

En MongoDB 5.0, las colecciones de series de tiempo solo admiten operaciones de inserción y queries de lectura. Las actualizaciones y las operaciones de borrado manuales ocasionan un error.

Para borrar automáticamente datos antiguos, configura la eliminación automática (TTL).

Para remover todos los documentos de una colección, usar el método drop() para descartar la colección.

Se ha mejorado el soporte para índices secundarios en MongoDB 6.0.

A partir de MongoDB 6.0, puede añadir un índice secundario a cualquier campo.

No se admiten estos tipos de índices:

La propiedad del índice TTL no es compatible. Para eliminar el TTL, utilice expireAfterSeconds.

Los siguientes tipos de índice solo se pueden crear en el metaField:

Para 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 hay índices secundarios en colecciones de series de tiempo y necesitas degradar la versión de compatibilidad de funciones (FCV), primero debes descartar cualquier índice secundario que sea incompatible con la FCV degradada. Para obtener más información, consulta setFeatureCompatibilityVersion.

En MongoDB 5.0 y anteriores:

  • El metaField puede tener índices secundarios.

  • El timeField puede tener índices secundarios.

  • Si el metaField es un documento, puedes agregar índices secundarios en los campos dentro del documento.

Tip

No puedes crear una colección de series de tiempo como colección con tamaño fijo.

Solo puedes establecer el tipo de colección al crear una colección:

  • Una colección existente no se puede convertir en una colección de series de tiempo.

  • Una colección de series de tiempo 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, migrar datos a una colección de series de tiempo.

Solo puedes configurar los parámetros timeField y metaField de una colección al momento de crearla. No puedes modificar estos parámetros más tarde.

Después de configurar el granularity, sólo 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 el granularity de "seconds" a "hours", primero aumenta el granularity a "minutes" y luego a "hours".

A partir de MongoDB 5.1 (y 5.0.6), puedes crear colecciones sharded series temporales.

En versiones anteriores a MongoDB 5.0.6, no se puede fragmentar colecciones de series de tiempo.

No se pueden ejecutar comandos de administración de particionamiento en colecciones de series de tiempo particionadas.

Al particionar colecciones de series de tiempo, solo se pueden especificar los siguientes campos en la clave de partición:

  • La metaField

  • Subcampos de metaField

  • La timeField

Puede especificar combinaciones de estos campos en la clave de partición. No se admiten otros campos, incluido _id, en el patrón de clave de partición.

Cuando se especifica la clave de partición:

Tip

Evita especificar solo el timeField como clave de partición. Dado que el timeField aumenta de manera monótona, puede provocar que todas las escrituras aparezcan en un solo fragmento dentro del clúster. Idealmente, los datos se distribuyen uniformemente entre los fragmentos.

Para aprender cómo elegir mejor una clave de partición, consultar:

No puede cambiar el particionado de una colección de series de tiempo particionada. Sin embargo, puede refinar su clave de partición.

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.

No puede escribir en colecciones de series temporales en transacciones.

Nota

Las lecturas desde las colecciones de series de tiempo se admiten en transacciones.

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 a partir de un namespace de colección de buckets de serie de tiempo (es decir, una colección con el prefijo system.buckets).

Las operaciones de lectura en colecciones de series de tiempo con nivel de consistencia de lectura "snapshot" garantizan aislamiento de snapshot solo en ausencia de operaciones concurrentes de descarte o cambio de nombre en colecciones durante la operación de lectura. Volver a crear una colección de series de tiempo en el mismo namespace con una configuración de granularidad diferente no produce un aislamiento completo de snapshot.

Volver

Compresión de serie de tiempo