DynamoDB "Cannot Specify AttributesToGet When Select Is COUNT": no se puede especificar la proyección cuando Select es COUNT

TL;DR — Tu Query/Scan establece Select: COUNT y un ProjectionExpression (o el heredado AttributesToGet). COUNT devuelve solo el número de elementos coincidentes, nunca los elementos en sí, por lo que nombrar los atributos a devolver es contradictorio: DynamoDB lo rechaza. Elija uno: Select: COUNT sin proyección, o una proyección con Select: SPECIFIC_ATTRIBUTES (el valor predeterminado cuando proporciona un ProjectionExpression).

Qué significa

ValidationException: 1 validation error detected: Cannot specify the AttributesToGet when choosing to get only the Count

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Cannot specify the ProjectionExpression when choosing to get only the Count

(Ese es el mensaje con el parámetro legado AttributesToGet; con ProjectionExpression el texto difiere, pero la regla es la misma.) Select controla lo que devuelve una lectura. COUNT le pide a DynamoDB un recuento (Count/ScannedCount) y ningún dato de Item. Un ProjectionExpression/AttributesToGet pide atributos específicos de los Items devueltos. Esos dos son mutuamente excluyentes — la referencia de la API de Query lo deja claro: "If you use the ProjectionExpression parameter, then the value for Select can only be SPECIFIC_ATTRIBUTES. Any other value for Select will return an error." Una nota de coste: COUNT sigue consumiendo la misma capacidad de lectura que traer realmente los Items — ahorra ancho de banda, no RCU.

Por qué ocurre

  • Ambos parámetros establecidos a la vezSelect: COUNT dejado en su sitio mientras se añadía un ProjectionExpression (o viceversa).
  • AttributesToGet legado combinado con Select: COUNT.
  • Un generador de consultas que siempre adjunta una proyección, aunque quien llama solo quisiera un recuento.
  • Malentendido de Select — esperar que COUNT también devuelva los Items que contó.

Cómo solucionarlo

  1. ¿Solo cuentas? Quita la proyección. Establece Select: COUNT y elimina ProjectionExpression/AttributesToGet.
  2. ¿Necesitas atributos específicos? Quita Select: COUNT. Suministra un ProjectionExpression; DynamoDB establece Select por defecto a SPECIFIC_ATTRIBUTES, así que normalmente no configuras Select en absoluto.
  3. ¿Necesitas el recuento y los Items? Haz una llamada para los Items (con tu proyección) y lee su Count, o haz una llamada Select: COUNT separada.
  4. Prefiere ProjectionExpression sobre AttributesToGet — AWS marca AttributesToGet como un parámetro legado y recomienda ProjectionExpression en su lugar.

Ábrelo en DynoTable

El panel de consultas de DynoTable separa el modo recuento de la proyección — o traes Items con los atributos seleccionados, o lees el número de coincidencias, nunca ambas cosas en una petición contradictoria. Abre una tabla con ⌘K, lanza una Query y mira el recuento de resultados en la barra de estado sin adjuntar un ProjectionExpression.

Usa el Query Builder para generar una petición solo-proyección o solo-recuento para el código de tu SDK. Cambia de perfil con ⌘P; configúralos en Ajustes → Perfiles con Test Connection. Consulta Conectar a AWS e Instalar.

Fuentes

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.