Docs Menu
Docs Home
/
Manual de MongoDB
/

Límites y umbrales de MongoDB

Este documento proporciona una colección de limitaciones estrictas y flexibles del sistema MongoDB. Las limitaciones en esta página se aplican a las implementaciones alojadas en todos los entornos siguientes, a menos que se indique lo contrario:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Las siguientes limitaciones se aplican únicamente a las implementaciones alojadas en MongoDB Atlas. Si alguno de estos límites representa un problema para la organización, se debe contactar a soporte de Atlas.

Componente
Limit

12

Particiones en clústeres de una sola región

70

Permisos de red entre regiones para un clúster multirregional

40. Además, si un clúster en cualquier proyecto abarca más de 40 regiones, no puede crear un clúster multiregional en este proyecto.

Nodos elegibles por set de réplicas o partición

7

Nivel de clúster para el servidor de configuración (mínimo y máximo)

M30

MongoDB Atlas limita las conexiones entrantes concurrentes según la clase y el nivel de clúster. Los límites de conexión de MongoDB Atlas se aplican por nodo. Para clústeres fragmentados, los límites de conexión de MongoDB Atlas se aplican por cada router mongos. El número de routers mongos es igual al número de nodos de set de réplicas en todos los fragmentos.

La preferencia de lectura también contribuye al número total de conexiones que MongoDB Atlas puede asignar para una determinada query.

MongoDB Atlas tiene los siguientes límites de conexión para los niveles de clúster especificados:

MongoDB Atlas Cluster Tier
Conexiones máximas por nodo

M0

500

M2

500

M5

500

M10

1500

M20

3000

M30

3000

M40

6000

M50

16000

M60

32000

M80

96000

M140

96000

M200

128000

M300

128000

MongoDB Atlas Cluster Tier
Conexiones máximas por nodo

M40

4000

M50

16000

M60

32000

M80

64000

M140

96000

M200

128000

M300

128000

M400

128000

M700

128000

MongoDB Atlas Cluster Tier
Conexiones máximas por nodo

M0

500

M2

500

M5

500

M10

1500

M20

3000

M30

3000

M40

6000

M50

16000

M60

32000

M80

64000

M140

96000

M200

128000

M300

128000

Nota

MongoDB Atlas reserva una pequeña cantidad de conexiones a cada clúster para soportar los servicios de MongoDB Atlas.

Si se conecta a una implementación multi-nube de MongoDB Atlas a través de una conexión privada, solo puede acceder a los nodos del mismo proveedor de nube desde el que se conecta. Este proveedor de nube podría no tener el nodo primario en su región. Cuando esto ocurra, debe especificar el modo de preferencia de lectura secundaria en la cadena de conexión para acceder a la implementación.

Si necesitas acceso a todos los nodos para tu implementación multinube de MongoDB Atlas desde tu proveedor actual a través de una conexión privada, debes realizar una de las siguientes acciones:

  • Configura una VPN en el proveedor actual para cada uno de los proveedores restantes.

  • Configure un nodo privado para MongoDB Atlas para cada uno de los proveedores restantes.

Aunque no hay un límite estricto en la cantidad de colecciones en un solo clúster de MongoDB Atlas, el rendimiento de un clúster podría degradarse si sirve una gran cantidad de colecciones e índices. Las colecciones más grandes tienen un mayor impacto en el rendimiento.

El número máximo combinado recomendado de colecciones e índices por nivel de clúster de MongoDB Atlas es el siguiente:

MongoDB Atlas Cluster Tier
Máximo recomendado

M10

5000 colecciones e índices

M20 / M30

10 000 colecciones e índices

M40/+

100 000 colecciones e índices

Las implementaciones de MongoDB Atlas tienen los siguientes límites de organización y proyecto:

Componente
Limit

Usuarios de base de datos por proyecto de MongoDB Atlas

100

Usuarios de Atlas por proyecto de MongoDB Atlas

500

Usuarios por organización de MongoDB Atlas

500

Claves API por organización de MongoDB Atlas

500

Entradas de la lista de acceso por proyecto de MongoDB Atlas

200

Usuarios por equipo de MongoDB Atlas

250

Equipos por proyecto de MongoDB Atlas

100

Equipos por organización de MongoDB Atlas

250

Equipos por usuario de MongoDB Atlas

100

Organizaciones por usuario de MongoDB Atlas

250

Organizaciones vinculadas por usuario de MongoDB Atlas

50

Clústeres por proyecto de MongoDB Atlas

25

Proyectos por organización de MongoDB Atlas

250

Roles personalizados de MongoDB por proyecto de MongoDB Atlas

100

Roles asignados a cada usuario de base de datos

100

Facturación por hora por organización de MongoDB Atlas

$50

Instancias federadas de bases de datos por proyecto de MongoDB Atlas

25

Total de conexiones peering de red por proyecto de MongoDB Atlas

50. Además, MongoDB Atlas limita el número de nodos por Conexión peering de red en función del bloque CIDR y la región seleccionada para el proyecto.

Total de conexiones peering de red pendientes por proyecto de MongoDB Atlas

25

Objetivos direccionables de AWS Private Link por región

50

Azure PrivateLink objetivos direccionables por región

150

Claves de fragmentación únicas por proyecto de clúster global gestionado por MongoDB Atlas

40. Esto solo se aplica a los clústeres globales con fragmentación gestionada por Atlas. No hay límites en la cantidad de claves de fragmentación únicas por proyecto para los clústeres globales con fragmentación autogestionada.

M0 Clústeres por proyecto de MongoDB Atlas

1

Las cuentas de servicio de MongoDB Atlas tienen los siguientes límites de organización y proyecto:

Componente
Limit

Cuentas de servicio de Atlas por organización de MongoDB Atlas

200

Entradas de la lista de acceso por cuenta de servicio de MongoDB Atlas

200

Secretos por cuenta de servicio de MongoDB Atlas

2

Tokens activos por cuenta de servicio de MongoDB Atlas

100

MongoDB Atlas limita la longitud y aplica los requisitos de ReGex para las siguientes etiquetas de componentes:

Componente
Límite de caracteres
Patrón RegEx

Nombre del clúster

64 [1]

^([a-zA-Z0-9]([a-zA-Z0-9-]){0,21}(?<!-)([\w]{0,42}))$ [2]

Nombre del proyecto

64

^[\p{L}\p{N}\-_.(),:&@+']{1,64}$ [3]

Nombre de la organización

64

^[\p{L}\p{N}\-_.(),:&@+']{1,64}$ [3]

Descripción de la llave de API

250

[1] Si tiene modo de emparejamiento exclusivo activado, el límite de caracteres del nombre del clúster es 23.
[2] MongoDB Atlas utiliza los primeros 23 caracteres del nombre de un clúster. Estos caracteres deben ser únicos dentro del proyecto del clúster. Los nombres de clústeres con menos de 23 caracteres no pueden terminar con un guión (-). Los nombres de clúster con más de 23 caracteres no pueden tener un guion como el carácter número 23.
[3](1, 2) Los nombres de organizaciones y proyectos pueden incluir cualquier letra o número Unicode, además de los siguientes signos de puntuación: -_.(),:&@+'.

Se aplican limitaciones adicionales a los clústeres gratuitos y compartidos de MongoDB Atlas. Para obtener más información, consulte los siguientes recursos:

Algunos comandos de MongoDB no son compatibles con MongoDB Atlas. Además, algunos comandos solo son compatibles con clústeres gratuitos de MongoDB Atlas. Para aprender más, consulta los siguientes recursos:

Tamaño del documento BSON

El tamaño máximo del documento BSON es 16 megabytes.

El tamaño máximo del documento ayuda a garantizar que un solo documento no utilice una cantidad excesiva de RAM ni, durante la transmisión, un ancho de banda excesivo. Para almacenar documentos que superen el tamaño máximo, MongoDB proporciona la API de GridFS. Consulte y la mongofiles documentación de su controlador para obtener más información sobre GridFS.

Profundidad de anidación para documentos BSON

MongoDB admite un máximo de 100 niveles de anidamiento para documentos BSON. Cada objeto o arreglo agrega un nivel.

Uso de mayusculas en nombres de bases de datos

No confíe en las mayúsculas para distinguir entre bases de datos. Por ejemplo, no puede utilizar dos bases de datos con nombres como salesData y SalesData.

Después de crear una base de datos en MongoDB, debes usar mayúsculas coherentes al referirse a ella. Por ejemplo, si creas la base de datos salesData, no la menciones utilizando mayúsculas alternativas, como salesdata o SalesData.

Restricciones en los nombres de bases de datos para Windows

Para las implementaciones de MongoDB que se ejecutan en Windows, los nombres de las bases de datos no pueden contener ninguno de los siguientes caracteres:

/\. "$*<>:|?

Además, los nombres de las bases de datos no pueden contener el carácter nulo.

Restricciones sobre los nombres de bases de datos para sistemas Unix y Linux

Para las implementaciones de MongoDB que se ejecutan en sistemas Unix y Linux, los nombres de las bases de datos no pueden contener ninguno de los siguientes caracteres:

/\. "$

Además, los nombres de las bases de datos no pueden contener el carácter nulo.

Longitud de los nombres de bases de datos

Los nombres de bases de datos no pueden estar vacíos y deben tener menos de 64 caracteres.

Restricción en los nombres de colección

Los nombres de las colecciones deben comenzar con un guion bajo o un carácter de letra, y no pueden:

  • contenga el $.

  • ser una string vacía (por ejemplo, "").

  • contiene el carácter null.

  • comience con el prefijo system.. (Reservado para uso interno.)

  • contiene .system..

Si el nombre de la colección incluye caracteres especiales, como el carácter de subrayado, o comienza con números, para acceder a la colección, se debe usar el método db.getCollection() en mongosh o un método similar para el driver.

Longitud del namespace:

Si featureCompatibilityVersion se "4.4" establece en o superior, MongoDB aumenta el límite del espacio de nombres de colección/vista a 255 bytes. Para una colección o vista, el espacio de nombres incluye el nombre de la base de datos, el punto. () y el nombre de la colección/vista (p. ej.,). <database>.<collection>

Restricciones en los nombres de campos
  • Los nombres de campo no pueden contener el caracter null.

  • El servidor permite el almacenamiento de nombres de campo que contienen puntos (.) y signos de dólar ($).

  • MongodB 5.0 ofrece un mejor soporte para el uso de ($) y (.) en los nombres de campo. Existen algunas restricciones. Consulta Consideraciones sobre los nombres de campo para obtener más detalles.

Restricciones en el campo _id

El nombre del campo _id está reservado para su uso como llave primaria; su valor debe ser único en la colección, es inmutable y puede ser de cualquier tipo que no sea un arreglo o una expresión regular. Si el _id contiene subcampos, los nombres de los subcampos no pueden comenzar con el símbolo ($).

Advertencia

Tenga precaución, los problemas tratados en esta sección podrían provocar pérdida o corrupción de datos.

El lenguaje de consulta de MongoDB no admite documentos con nombres de campo duplicados. Si bien algunos generadores BSON permiten crear documentos BSON con nombres de campo duplicados, no se permite insertar estos documentos en MongoDB,incluso si la inserción se realiza correctamente o parece realizarse correctamente. Por ejemplo, insertar un documento BSON con nombres de campo duplicados mediante un controlador MongoDB puede provocar que el controlador elimine automáticamente los valores duplicados antes de la inserción, o que se inserte un documento no válido con campos duplicados. Consultar estos documentos generaría resultados arbitrarios e incoherentes.

No utilice un nombre de campo que sea igual a la notación de puntos para un campo incrustado. Si tiene un documento con un campo incrustado { "a" : { "b": ... } }, los demás documentos de esa colección no deben tener un campo de nivel superior "a.b".

Si puede referenciar un campo incrustado y un campo de nivel superior de la misma manera, las operaciones de indexación y fragmentación ocurren en el campo incrustado. No se puede indexar ni fragmentar en el campo de nivel superior "a.b" mientras la colección tiene un campo incrustado al que se hace referencia de la misma manera.

Por ejemplo, si su colección contiene documentos con un campo incrustado { "a" : { "b": ... } } y un campo de nivel superior "a.b", las operaciones de indexación y fragmentación ocurren en el campo incrustado. No es posible indexar o fragmentar en el campo de nivel superior "a.b" cuando su colección también contiene un campo incrustado { "a" : { "b": ... } }.

A partir de MongoDB 5.0, los nombres de los campos del documento pueden tener prefijo de dólar ($) y pueden contener puntos (.). Sin embargo, mongoimport y mongoexport pueden no funcionar como se espera en algunas situaciones con nombres de campos que utilizan estos caracteres.

MongoDB Extended JSON v2 no puede diferenciar entre los contenedores de tipo y los campos que tienen el mismo nombre que los contenedores de tipo. No utilices formatos JSON extendidos en contextos donde las representaciones BSON correspondientes puedan incluir claves con prefijo de dólar ($). El mecanismo DBRef es una excepción a esta regla general.

También hay restricciones en el uso de mongoimport y mongoexport con puntos (.) en los nombres de campo. Dado que los archivos CSV utilizan el punto (.) para representar jerarquías de datos, un punto (.) en el nombre de un campo se interpretará incorrectamente como un nivel de anidamiento.

Existe una pequeña posibilidad de pérdida de datos cuando se utilizan nombres de campo con el prefijo dólar ($) o nombres de campo que contienen puntos (.) si estos nombres de campo se utilizan junto con escrituras no reconocidas (nivel de confirmación de escritura w=0) en servidores que sean anteriores a MongoDB 5.0.

Al ejecutar los comandos insert, update y findAndModify, los controladores 5.0 compatibles con eliminan las restricciones sobre el uso de documentos con nombres de campo con el$ prefijo dólar () o puntos. (). Estos nombres de campo generaban un error en el cliente en versiones anteriores del controlador.

Las restricciones se eliminan independientemente de la versión del servidor a la que esté conectado el controlador. Si un controlador 5.0 envía un documento a un servidor más antiguo, el documento será rechazado sin enviar un error.

Longitud del namespace

Si featureCompatibilityVersion se "4.4" establece en o superior, MongoDB aumenta el límite del espacio de nombres de colección/vista a 255 bytes. Para una colección o vista, el espacio de nombres incluye el nombre de la base de datos, el punto. () y el nombre de la colección/vista (p. ej.,). <database>.<collection>

Tip

Número de índices por colección

Una sola colección puede tener como máximo 64 índices.

Número de campos indexados en un índice compuesto

No puede haber más de 32 campos en un índice compuesto.

Las consultas no pueden utilizar índices geoespaciales y de texto

No se puede combinar la query $text, la cual requiere un índice de texto especial, con un operador de la query que requiere un tipo diferente de índice especial. Por ejemplo, no se puede combinar la query $text con el operador $near.

Los campos con índices de 2dsphere solo pueden contener geometrías

Los campos con índices 2dsphere deben contener datos geométricos en forma de pares de coordenadas o datos GeoJSON. Si intentas insertar un documento con datos no geométricos en un campo indexado 2dsphere, o compilar un índice 2dsphere en una colección donde el campo indexado tenga datos no geométricos, la operación fallará.

Tip

El límite de índices únicos en Restricciones operativas de fragmentación.

Los valores NaN devueltos por query cubiertos por el motor de almacenamiento WiredTiger siempre son de tipo double

Si el valor de un campo devuelto de una query que está cubierta por un índice es NaN, el tipo de ese valor NaN es siempre double.

Multikey Index

Índices multiclave no pueden cubrir consultas sobre campos de arreglos.

Índice geoespacial

Los índices geoespaciales no pueden cubrir una query.

Uso de memoria en la creación de índices

createIndexes permite la creación de uno o más índices en una colección. createIndexes utiliza una combinación de memoria y archivos temporales en disco para completar la creación de índices. El límite predeterminado de uso de memoria para es createIndexes de 200 megabytes, compartidos entre todos los índices creados con un único createIndexes comando. Una vez alcanzado el límite de memoria, utiliza archivoscreateIndexes temporales de disco en un subdirectorio llamado _tmp dentro del --dbpath directorio para completar la creación.

Puede anular el límite de memoria configurando el maxIndexBuildMemoryUsageMegabytes parámetro de servidor. Un límite de memoria más alto puede resultar en una compilación de índices más rápida. Sin embargo, si este límite es demasiado alto en relación con la RAM no utilizada del sistema, puede provocar el agotamiento de la memoria y el apagado del servidor.

La creación de índices puede iniciarse mediante un comando de usuario, como "Crear índice", o mediante un proceso administrativo, como una sincronización inicial. Ambos están sujetos al límite establecido maxIndexBuildMemoryUsageMegabytes por.

Una operación de sincronización inicial rellena solo una colección a la vez y no existe riesgo de exceder el límite de memoria. Sin embargo, es posible que un usuario inicie compilaciones de índices en varias colecciones de varias bases de datos simultáneamente y potencialmente consuma una cantidad de memoria superior al límite establecido maxIndexBuildMemoryUsageMegabytes en.

Tip

Para minimizar el impacto de la creación de un índice en conjuntos de réplicas y clústeres fragmentados con fragmentos de conjuntos de réplicas, utilice un procedimiento de creación de índice continuo como se describe en Creaciones de índice continuo en conjuntos de réplicas.

Tipos de intercalación y de índices

Los siguientes tipos de índice solo tienen soporte para la comparación binaria simple y no tienen soporte para la intercalación:

Tip

Para crear un índice text, 2d o geoHaystack en una colección que tiene una intercalación no simple, debe especificar explícitamente {collation: {locale: "simple"} } al crear el índice.

Hidden Indexes
Máximo número de claves de clasificación
  • Puedes ordenar sobre un máximo de 32 claves.

  • Proveer un patrón de ordenación con campos duplicados causa un error.

Máxima número de documentos en una colección con tamaño fijo

Si especifica un número máximo de documentos para una colección limitada mediante el max parámetro a, el límite debe ser inferior create a 2 32 documentos. Si no especifica un número máximo de documentos al crear una colección limitada, no hay límite en el número de documentos.

Cantidad de nodos de un set de réplicas

Los sets de réplicas pueden tener hasta 50 nodos.

Número de nodos con derecho a voto de un set de réplicas

Los sets de réplicas pueden tener hasta siete miembros con derecho a voto. Para sets de réplicas con más de siete miembros en total, consulta Miembros sin derecho a voto.

Tamaño máximo del Oplog creado automáticamente

Si no especifica explícitamente un tamaño de oplog (es decir, con oplogSizeMB o --oplogSize), MongoDB creará un oplog que no supere los 50 gigabytes. [4]

[4] El oplog puede crecer más allá de su límite de tamaño configurado para evitar borrar el majority commit point.

Los clústeres fragmentados tienen las restricciones y los umbrales que se describen aquí.

Operaciones no disponibles en entornos fragmentados

$where no permite referencias al objeto db desde la función $where. Esto es poco común en colecciones no particionadas.

El comando no se admite en entornos geoSearch fragmentados.

En MongoDB 5.0 y versiones anteriores, no se pueden especificar colecciones fragmentadas en el from parámetro de las $lookup etapas.

Queries cubiertos en clústeres fragmentados

Cuando se ejecutan en mongos, los índices solo pueden cubrir las query sobre colecciones fragmentadas si el índice contiene la clave de fragmentación.

Particionado de tamaño de datos de la colección existente

Una colección existente solo se puede fragmentar si su tamaño no supera los límites específicos. Estos límites se pueden estimar en función del tamaño promedio de todos los valores de clave de fragmentación y el tamaño del fragmento configurado.

Importante

Estos límites solo se aplican a la fragmentación inicial. Las colecciones fragmentadas pueden alcanzar cualquier tamaño después de habilitar la fragmentación correctamente.

MongoDB distribuye los documentos en la colección de modo que cada fragmento esté lleno hasta la mitad al crearse. Utilice las siguientes fórmulas para calcular el tamaño máximo teórico de la colección.

maxSplits = 16777216 (bytes) / <average size of shard key values in bytes>
maxCollectionSize (MB) = maxSplits * (chunkSize / 2)

Nota

El tamaño máximo de documento BSON es de 16MB o 16777216 bytes.

Todas las conversiones deben utilizar la escala base2, por ejemplo, 1024 kilobytes = 1 megabytes.

Si maxCollectionSize es menor o casi igual al tamaño de la colección objetivo, aumente el tamaño del fragmento para garantizar una fragmentación inicial exitosa. Si tiene dudas sobre si el resultado del cálculo se acerca demasiado al tamaño de la colección objetivo, probablemente sea mejor aumentar el tamaño del fragmento.

Tras una fragmentación inicial exitosa, puede reducir el tamaño del fragmento según sea necesario. Si posteriormente reduce el tamaño del fragmento, puede que todos los fragmentos tarden un tiempo en dividirse al nuevo tamaño. Consulte "Modificar el tamaño del fragmento en un clúster fragmentado" para obtener instrucciones sobre cómo modificarlo.

Esta tabla ilustra los tamaños máximos aproximados de recolección utilizando las fórmulas descritas anteriormente:

Tamaño promedio de los valores de clave de fragmento
512 bytes
256 bytes
128 bytes
64 bytes

Número máximo de divisiones

32,768

65,536

131,072

262,144

Tamaño máximo de la colección (tamaño de fragmento de 64 MB)

1 TB

2 TB

4 TB

8 TB

Tamaño máximo de la colección (tamaño de fragmento de 128 MB)

2 TB

4 TB

8 TB

16 TB

Tamaño máximo de la colección (tamaño de fragmento de 256 MB)

4 TB

8 TB

16 TB

32 TB

Operaciones de modificación de un solo documento en colecciones fragmentadas

Para utilizar las operaciones update y remove() en una colección particionada que especifique la opción justOne o multi: false:

  • Si solo apunta a un fragmento, puede usar una clave de fragmentación parcial en la especificación de query o,

  • Puede proporcionar la clave de fragmentación o el campo _id en la especificación de la query.

Índices únicos en colecciones fragmentadas

MongoDB no admite índices únicos entre fragmentos, excepto cuando el índice único contiene la clave de fragmentación completa como prefijo del índice. En estas situaciones, MongoDB aplicará la unicidad en toda la clave, no en un solo campo.

Tip

Consulte:

Restricciones únicas en campos arbitrarios para un enfoque alternativo.

Número máximo de documentos por fragmento a migrar

De forma predeterminada, MongoDB no puede mover un fragmento si la cantidad de documentos en el fragmento es mayor que 1.3 veces el resultado de dividir el tamaño del fragmento configurado por el tamaño promedio del documento. incluyedb.collection.stats() el avgObjSize campo, que representa el tamaño promedio del documento en la colección.

Para fragmentos que son demasiado grandes para migrar, comenzando en MongoDB:4.4

Tipo de índice de clave de fragmentación

Un índice de clave de fragmentación puede ser un índice ascendente en la clave de fragmentación, un índice compuesto que comienza con la clave de fragmentación y especifica el orden ascendente para la clave de fragmentación, o un índice encriptado.

Un índice de clave de fragmentación no puede ser:

Selección de Shard Key

Las opciones para cambiar una clave de partición dependen de la versión de MongoDB que está ejecutando:

Las claves de fragmentación que aumentan de manera monótona pueden limitar el rendimiento de inserción

Para los clústeres con volúmenes de inserción altos, una clave de fragmentación con claves que aumentan o disminuyen de manera monótona puede afectar el rendimiento de inserción. Si la clave de fragmentación es el campo _id, se debe tener en cuenta que los valores por defecto de los campos _id son ObjectIds que generalmente tienen valores crecientes.

Al insertar documentos con claves de fragmentación que aumentan de forma monótona, todas las inserciones pertenecen al mismo fragmento en una sola partición. El sistema eventualmente divide el rango de fragmentos que recibe todas las operaciones de guardado y migra su contenido para distribuir los datos de manera más uniforme. Sin embargo, en cualquier momento, el clúster dirige las operaciones de inserción únicamente a una partición, lo que crea un cuello de botella en el rendimiento de inserción.

Si las operaciones en el clúster son predominantemente de lectura y actualizaciones, esta limitación puede no afectar al clúster.

Para evitar esta restricción, usa una clave de fragmentación encriptada o selecciona un campo que no aumente ni disminuya de forma monótona.

Claves de partición con hash y índices encriptados almacenan hashes de claves con valores ascendentes.

Operaciones de clasificación

Si MongoDB no puede usar uno o más índices para obtener el orden de ordenación, debe realizar una operación de ordenación por bloqueo de los datos. El nombre se refiere al requisito de que la etapa SORT lea todos los documentos de entrada antes de devolver los de salida, bloqueando así el flujo de datos para esa consulta específica.

Si MongoDB requiere utilizar más de 100 megabytes de memoria del sistema para la operación de ordenamiento por bloqueo, MongoDB devuelve un error a menos que la consulta cursor.allowDiskUse() especifique. permite a MongoDB utilizar archivos temporales enallowDiskUse() el disco para almacenar datos que excedan el 100 límite de memoria del sistema de megabytes mientras procesa una operación de ordenamiento por bloqueo.

Para obtener más información sobre la ordenación y el uso de índices, consulta Uso de la ordenación y el índice.

Etapas de la pipeline de agregación

MongoDB limita el número de etapas de la canalización de agregación permitidas en un solo pipeline a 1000.

Si un pipeline de agregación supera el límite de etapa antes o después de ser analizada, se recibe un error.

Memoria de pipeline de agregación

Cada etapa de la canalización tiene un límite de 100 megabytes de RAM. De forma predeterminada, si una etapa supera este límite, MongoDB genera un error. En algunas etapas de la canalización, puede permitir que el procesamiento ocupe más espacio mediante la opción allowDiskUse para que las etapas de agregación de la canalización escriban datos en archivos temporales.

La $search etapa de agregación no está restringida a 100 megabytes de RAM porque se ejecuta en un proceso separado.

Ejemplos de etapas que pueden extenderse al disco cuando allowDiskUse es true son:

Nota

Las etapas del pipeline operan en flujos de documentos, donde cada etapa del pipeline toma documentos, realizando su procesamiento y luego produciendo los documentos resultantes.

Algunas etapas no pueden generar ningún documento hasta que hayan procesado todos los documentos entrantes. Estas etapas del pipeline deben mantener su salida en la RAM hasta que se procesen todos los documentos entrantes. Como resultado, estas etapas de la pipeline pueden requerir más espacio que el límite de 100 MB.

Si los resultados de una de las etapas del pipeline $sort exceden el límite, se debe considerar agregar una etapa $limit.

Los mensajes de registro del perfilador y los mensajes de registro de diagnóstico incluyen un indicador usedDisk si alguna etapa de agregación escribió datos en archivos temporales debido a restricciones de memoria.

Agregación y nivel de consistencia de lectura
Las query geoespaciales 2d no pueden utilizar el operador $or
Query geoespacial

Para consultas esféricas, utilice el resultado del índice 2dsphere.

El uso del índice 2d para consultas esféricas puede generar resultados incorrectos, como el uso del índice 2d para consultas esféricas que envuelven los polos.

Coordenadas geoespaciales
  • Los valores de longitud válidos están entre -180 y 180, ambos inclusive.

  • Los valores de latitud válidos están entre -90 y 90, ambos inclusive.

Área de polígonos de GeoJSON

Para$geoIntersectso$geoWithin, si especifica un polígono de un solo anillo con un área mayor que un hemisferio, incluya la expresiónthe custom MongoDB coordinate reference system in the $geometry; de lo contrario, $geoIntersectso$geoWithinconsultas para la geometría complementaria. Para todos los demás polígonos GeoJSON con áreas mayores que un hemisferio, $geoIntersectso$geoWithinconsultas para la geometría complementaria.

Transacciones multidocumento

Para transacciones multidocumento:

  • Puede crear colecciones e índices en transacciones. Para más información, consulte Crear colecciones e índices en una transacción.

  • Las colecciones utilizadas en una transacción pueden encontrarse en diferentes bases de datos.

    Nota

    No puedes crear nuevas colecciones en transacciones de escritura entre particiones. Por ejemplo, si guardas en una colección existente en una partición y creas implícitamente una colección en una partición diferente, MongoDB no puede realizar ambas operaciones en la misma transacción.

  • No se puede escribir en colecciones con tamaño fijo.

  • No puedes usar el nivel de consistencia de lectura "snapshot" al leer de una colección con tamaño fijo. (A partir de MongoDB 5.0)

  • No puedes leer ni escribir en colecciones en las bases de datos config, admin o local.

  • No se puede escribir en las colecciones de system.*.

  • No puedes devolver el plan de query de las operaciones admitidas usando explain o comandos similares.

  • Para los cursores creados fuera de una transacción, no puedes llamar a getMore dentro de la transacción.

  • Para los cursores creados en una transacción, no puedes llamar a getMore fuera de la transacción.

  • No puede especificar el comando killCursors como la primera operación en una transacción.

    Además, si ejecutas el comando killCursors dentro de una transacción, el servidor detiene inmediatamente los cursores especificados. No espera la confirmación de la transacción.

Las siguientes operaciones no están permitidas en las transacciones:

Las transacciones tienen un límite de tiempo de vida según lo especificado por transactionLifetimeLimitSeconds. El valor por defecto es 60 segundos.

Límite de tamaño de la agrupación del comando de escritura

100,000 Lasescrituras se permiten en una única operación por lotes, definida por una única solicitud al servidor.

Las Bulk() operaciones en y métodos comparables en los controladores no tienen este mongosh límite.

Vistas

La definición de vista pipeline no puede incluir $out las etapas ni. Si la definición de vista incluye $merge $lookup $facet una canalización anidada (por ejemplo, la definición de vista incluye las etapas o), esta restricción también se aplica a las canalizaciones anidadas.

Las vistas tienen las siguientes restricciones de operación:

  • Las vistas son de solo lectura.

  • No puede cambiar el nombre de vistas.

  • find() Las operaciones en las vistas no admiten los siguientes operadores de proyección:

  • Las vistas no son compatibles con $text.

  • Las vistas no dan soporte a operaciones de map-reduce.

Restricciones de proyecciones
$-Restricción de la ruta de campo con prefijo
La proyección de find() y de findAndModify() no pueden proyectar un campo que comience con $, con la excepción de los campos DBRef.Por ejemplo, la siguiente operación es inválida:
db.inventory.find( {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } )
$ Restricción de colocación de operadores posicionales
El operador de proyección $ solo puede aparecer al final de la ruta de campo, por ejemplo "field.$" o "fieldA.fieldB.$". Por ejemplo, la siguiente operación no es válida:
db.inventory.find( { }, { "instock.$.qty": 1 } )
Para resolver, elimine el componente de la ruta de campo que sigue al operador de proyección $.
Restricción de proyección de nombre de campo vacío
La proyección find() y la proyección findAndModify() no pueden incluir una proyección de un nombre de campo vacío. Por ejemplo, la siguiente operación es inválida:
db.inventory.find( { }, { "": 0 } )
En versiones anteriores, MongoDB trata la inclusión/exclusión del campo vacío de la misma manera que la proyección de campos inexistentes.
Colisión de ruta: Documentos incrustados y sus campos
No puedes proyectar un documento incrustado con ninguno de los campos del documento incrustado. Por ejemplo, considera una colección inventory con documentos que contienen un campo size:
{ ..., size: { h: 10, w: 15.25, uom: "cm" }, ... }
La siguiente operación falla con un error de Path collision porque intenta proyectar tanto el documento size como el campo size.uom:
db.inventory.find( {}, { size: 1, "size.uom": 1 } )
En versiones anteriores, la última proyección entre los documentos incrustados y sus campos determinaba la proyección:
  • Si la proyección del documento incrustado viene después de todas y cada una de las proyecciones de sus campos, MongoDB proyecta el documento incrustado. Por ejemplo, el documento de proyección { "size.uom": 1, size: 1 } produce el mismo resultado que el documento de proyección { size: 1 }.

  • Si la proyección del documento incrustado se realiza antes que la de cualquiera de sus campos, MongoDB proyecta el campo o los campos especificados. Por ejemplo, el documento de proyección { "size.uom": 1, size: 1, "size.h": 1 } produce el mismo resultado que el documento de proyección { "size.uom": 1, "size.h": 1 }.

Colisión de ruta: $slice de un arreglo y campos embebidos
find() y la proyección findAndModify() no pueden contener a la vez un $slice de un arreglo y un campo incrustado en el arreglo. Por ejemplo, considere una colección inventory que contiene un campo de arreglo instock:
{ ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], ... }
La siguiente operación falla con un error Path collision:
db.inventory.find( {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } )
En versiones anteriores, la proyección aplicaba ambas proyecciones y devolvía el primer elemento ($slice: 1) del arreglo instock, pero suprimía el campo warehouse en el elemento proyectado. A partir de MongoDB 4.4, para lograr el mismo resultado, utiliza el método db.collection.aggregate() con dos etapas $project separadas.
$ Operador posicional y restricción de $slice
Las proyecciones find() y findAndModify() no pueden incluir la expresión de proyección $slice como parte de una expresión de proyección $. Por ejemplo, la siguiente operación no es válida:
db.inventory.find( { "instock.qty": { $gt: 25 } }, { "instock.$": { $slice: 1 } } )
En versiones anteriores, MongoDB devuelve el primer elemento (instock.$) del arreglo instock que coincide con la condición de query; es decir, la proyección posicional "instock.$" tiene prioridad y la $slice:1 no realiza ninguna operación. El "instock.$": { $slice: 1 } no excluye ningún otro campo del documento.
Límite de sesiones y nombre de usuario $external

Para utilizar sesiones de cliente y garantías de consistencia causal con $external usuarios de autenticación (Kerberos, LDAP o x.509 usuarios), los nombres de usuario no pueden tener más de 10k bytes.

Tiempo de espera de inactividad de la sesión

Las sesiones que no reciben operaciones de lectura o escritura durante 30 minutos o que no se actualizan usando refreshSessions dentro de este umbral, son marcadas como expiradas y el servidor MongoDB puede cerrarlas en cualquier momento. Cerrar una sesión termina cualquier operación en curso y los cursores abiertos asociados con la sesión. Esto incluye cursores configurados con noCursorTimeout() o un maxTimeMS() mayor de 30 minutos.

Considera una aplicación que emite un db.collection.find(). El servidor devuelve un cursor junto con un lote de documentos definidos por la cursor.batchSize() del find(). La sesión se actualiza cada vez que la aplicación realiza una solicitud de un nuevo agrupamiento de documentos del servidor. Sin embargo, si la aplicación tarda más de 30 minutos en procesar el lote actual de documentos, la sesión se marca como expirada y se cierra. Cuando la aplicación solicita el siguiente lote de documentos, el servidor arroja un error porque el cursor se eliminó al cerrar la sesión.

Para las operaciones que devuelven un cursor, si el cursor puede estar inactivo durante más de 30 minutos, emite la operación dentro de una sesión explícita utilizando Mongo.startSession() y actualiza periódicamente la sesión utilizando el comando refreshSessions. Por ejemplo:

var session = db.getMongo().startSession()
var sessionId = session
sessionId // show the sessionId
var cursor = session.getDatabase("examples").getCollection("data").find().noCursorTimeout()
var refreshTimestamp = new Date() // take note of time at operation start
while (cursor.hasNext()) {
// Check if more than 5 minutes have passed since the last refresh
if ( (new Date()-refreshTimestamp)/1000 > 300 ) {
print("refreshing session")
db.adminCommand({"refreshSessions" : [sessionId]})
refreshTimestamp = new Date()
}
// process cursor normally
}

En la operación de ejemplo, el método db.collection.find() está asociado con una sesión explícita. El cursor está configurado con noCursorTimeout() para evitar que el servidor cierre el cursor si está inactivo. El bucle while incluye un bloque que utiliza refreshSessions para refrescar la sesión cada 5 minutos. Dado que la sesión nunca superará el tiempo de espera de inactividad de 30 minutos, el cursor puede permanecer abierto indefinidamente.

Para los controladores de MongoDB, consulta la documentación del controlador para obtener instrucciones y la sintaxis para crear sesiones.

Volver

Mensajes de registro

En esta página