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 vez —
Select: COUNTdejado en su sitio mientras se añadía unProjectionExpression(o viceversa). AttributesToGetlegado combinado conSelect: COUNT.- Un generador de consultas que siempre adjunta una proyección, aunque quien llama solo quisiera un recuento.
- Malentendido de
Select— esperar queCOUNTtambién devuelva los Items que contó.
Cómo solucionarlo
- ¿Solo cuentas? Quita la proyección. Establece
Select: COUNTy eliminaProjectionExpression/AttributesToGet. - ¿Necesitas atributos específicos? Quita
Select: COUNT. Suministra unProjectionExpression; DynamoDB estableceSelectpor defecto aSPECIFIC_ATTRIBUTES, así que normalmente no configurasSelecten absoluto. - ¿Necesitas el recuento y los Items? Haz una llamada para los Items (con tu proyección) y lee su
Count, o haz una llamadaSelect: COUNTseparada. - Prefiere
ProjectionExpressionsobreAttributesToGet— AWS marcaAttributesToGetcomo un parámetro legado y recomiendaProjectionExpressionen 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
- Query — Amazon DynamoDB API Reference (verificado 2026-07-13)
- AttributesToGet (legacy) (verificado 2026-07-13)
Errores relacionados
- Cannot use both expression and non-expression parameters — mezclar parámetros legados y de expresión.
- Query key condition not supported — una condición de clave mal formada en la misma petición.
- Aprende: Count, sum & aggregate · Projection expressions
Referencias
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- AttributesToGet (legacy) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.