Solución de errores habituales de la API de Azure Cosmos DB para MongoDB

SE APLICA A: MongoDB

En el siguiente artículo se describen los errores comunes y las soluciones para las implementaciones que usan Azure Cosmos DB for MongoDB.

Nota:

Azure Cosmos DB no hospeda el motor de MongoDB. Proporciona una implementación del protocolo de conexión 4.0 y 3.6 de MongoDB y compatibilidad heredada con la versión 3.2 del protocolo de conexión. Por lo tanto, algunos de estos errores solo se encuentran en la API de Azure Cosmos DB para MongoDB.

Errores habituales y soluciones

Código Error Descripción Solución
2 BadValue Una causa común es que la ruta de acceso del índice correspondiente al elemento order-by especificado se excluye o la consulta order by no tiene un índice compuesto correspondiente desde el que se puede atender. La consulta solicita que se ordene por un campo que no está indexado. Cree un índice coincidente (o índice compuesto) para la consulta de ordenación que se intenta realizar.
2 La transacción no está activa La transacción de varios documentos ha sobrepasado el límite de tiempo fijo de 5 segundos. Vuelva a intentar la transacción de varios documentos o limite el ámbito de las operaciones dentro de la transacción de varios documentos para que se complete en el límite de 5 segundos.
13 No autorizado La solicitud no tiene los permisos necesarios para completarse. Asegúrese de que está utilizando las claves correctas.
26 NamespaceNotFound No se encuentra la base de datos o la colección a la que se hace referencia en la consulta. Asegúrese de que el nombre de la base de datos o colección coincida exactamente con el nombre de la consulta.
50 ExceededTimeLimit La solicitud ha superado el tiempo de espera de 60 segundos de ejecución. Este error puede deberse a muchas causas. Una de las causas es cuando la capacidad de las unidades de solicitud asignada actualmente no es suficiente para completar la solicitud. Para solucionar esto, se pueden aumentar las unidades de solicitud de esa colección o base de datos. En otros casos, este error se puede solucionar dividiendo una solicitud grande en otras más pequeñas. Si se vuelve a intentar una operación de escritura que ha recibido este error, se puede producir una operación de escritura duplicada.

Si intenta eliminar grandes cantidades de datos sin afectar a las unidades de solicitud:
- Considere la posibilidad de usar TTL (basado en la marca de tiempo): Expiración de los datos con la API de Azure Cosmos DB para MongoDB
- Use el tamaño del cursor o del lote para realizar la eliminación. Puede capturar un solo documento cada vez y eliminarlo mediante un bucle. Esto le ayudará a eliminar los datos lentamente sin afectar a la aplicación de producción.
61 ShardKeyNotFound El documento de la solicitud no contenía la clave de partición de la colección (clave de partición de Azure Cosmos DB). Asegúrese de que la clave de partición de la colección se use en la solicitud.
66 ImmutableField La solicitud está intentando cambiar un campo inmutable. Los campos "_id" son inmutables. Asegúrese de que la solicitud no trate de actualizar el campo o el campo de clave de partición.
67 CannotCreateIndex No se puede completar la solicitud para crear un índice. Se pueden crear hasta 500 índices de un solo campo en cada contenedor. Se pueden incluir hasta ocho campos en un índice compuesto (los índices compuestos se admiten en la versión 3.6 y posteriores).
112 WriteConflict Error en la transacción de varios documentos debido a una transacción de varios documentos en conflicto Vuelva a intentar la transacción de varios documentos hasta que se complete correctamente.
115 CommandNotSupported No se admite el intento de solicitud. Se deben especificar otros detalles en el error. Si esta funcionalidad es importante para sus implementaciones, cree una incidencia de soporte técnico en Azure Portal. El equipo de Azure Cosmos DB le responderá.
11000 DuplicateKey La clave de partición (clave de partición de Azure Cosmos DB) del documento que se está insertando ya existe en la colección, o se infringió alguna restricción de un campo de índice único. Use la función update() para actualizar un documento existente. Si se infringió la restricción de un campo de índice único, inserte o actualice el documento con un valor de campo que no exista todavía en la partición. Otra opción sería usar un campo que contenga una combinación de los campos identificador y clave de partición.
16500 TooManyRequests El número total de unidades de solicitud consumidas es mayor que la tasa de unidades de solicitud aprovisionadas para la colección y se ha limitado. Considere la posibilidad de escalar el rendimiento asignado a un contenedor o un conjunto de contenedores desde Azure Portal o vuelva a intentarlo. Si habilita SSR (reintento en el servidor), Azure Cosmos DB reintenta automáticamente las solicitudes que no se envían debido a este error.
16501 ExceededMemoryLimit Como se trata de un servicio de varios inquilinos, la operación ha superado la asignación de memoria del cliente. Esto solo se aplica a Azure Cosmos DB for MongoDB versión 3.2. Reduzca el ámbito de la operación a través de criterios de consulta más restrictivos o póngase en contacto con soporte técnico desde Azure Portal. Ejemplo: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 Nombre de fase de canalización no reconocido. No se reconoció el nombre de fase en la solicitud de canalización de agregación. Asegúrese de que todos los nombres de canalización de agregación de la solicitud sean válidos.
- Problemas de versión de la conexión de MongoDB Las versiones anteriores de los controladores de MongoDB no pueden detectar el nombre de la cuenta de Azure Cosmos DB en las cadenas de conexión. Anexe appName=@accountName@ al final de la cadena de conexión, donde accountName es el nombre de la cuenta de Azure Cosmos DB.
- Problemas de red del cliente de MongoDB (como excepciones de socket o endOfStream) Error en la solicitud de red. Esto suele deberse a una conexión TCP inactiva que el cliente de MongoDB está tratando de usar. Los controladores de MongoDB suelen usar la agrupación de conexiones, que da como resultado una conexión aleatoria elegida del grupo que se usa para una solicitud. Las conexiones inactivas suelen agotar el tiempo de espera de Azure Cosmos DB después de cuatro minutos. Puede volver a intentar estas solicitudes con error en el código de la aplicación, cambiar la configuración del cliente de MongoDB (controlador) para desmontar las conexiones TCP inactivas antes de que se agote el tiempo de espera de cuatro minutos, o configurar las opciones keepalive del sistema operativo para mantener las conexiones TCP en estado activo.

Para evitar mensajes de conectividad, es posible que quiera cambiar la cadena de conexión para establecer maxConnectionIdleTime en 1 o 2 minutos.
-Controlador de Mongo: configure maxIdleTimeMS=120000
- Node.JS: configure socketTimeoutMS=120000, autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 minutos
- El shell de Mongo no funciona en Azure Portal. Cuando el usuario intenta abrir un shell de Mongo, no sucede nada y la pestaña se queda en blanco. Compruebe el firewall. El firewall no es compatible con el shell de Mongo en Azure Portal.
- Instale el shell de Mongo en el equipo local dentro de las reglas de firewall.
- Utilice el shell de Mongo heredado.
- No se puede conectar con la cadena de conexión. La cadena de conexión ha cambiado al actualizar desde 3.2 -> 3.6 Cuando se usa la API de Azure Cosmos DB para las cuentas de MongoDB, la versión 3.6 de las cuentas tiene el punto de conexión con el formato *.mongo.cosmos.azure.com, mientras que la versión 3.2 de las cuentas tiene el punto de conexión con el formato *.documents.azure.com.

Pasos siguientes

  • Aprenda a usar Studio 3T con la API de Azure Cosmos DB para MongoDB.
  • Aprenda a usar Robo 3T con la API de Azure Cosmos DB para MongoDB.
  • Explore ejemplos de MongoDB con la API de Azure Cosmos DB para MongoDB.