DynamoDB — impossible de spécifier une projection quand Select vaut COUNT
TL;DR — Ton Query/Scan a défini Select: COUNT et une ProjectionExpression (ou l'ancien AttributesToGet). COUNT ne renvoie que le nombre d'éléments correspondants, jamais les éléments eux-mêmes, donc nommer des attributs à retourner est contradictoire — DynamoDB le rejette. Choisis-en un : Select: COUNT sans projection, ou une projection avec Select: SPECIFIC_ATTRIBUTES (la valeur par défaut quand tu fournis une ProjectionExpression).
Ce que ça signifie
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(C'est le message avec l'ancien paramètre AttributesToGet ; avec ProjectionExpression la formulation diffère, mais la règle est la même.) Select contrôle ce que renvoie une lecture. COUNT demande à DynamoDB un décompte (Count/ScannedCount) et aucune donnée d'élément. Une ProjectionExpression/AttributesToGet demande des attributs spécifiques des éléments renvoyés. Les deux sont mutuellement exclusifs — la référence de l'API Query l'explique clairement : « 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. » Une note sur le coût : COUNT consomme quand même autant de capacité de lecture que de récupérer réellement les éléments — ça économise de la bande passante, pas des RCU.
Pourquoi ça arrive
- Les deux paramètres définis en même temps —
Select: COUNTlaissé en place pendant qu'uneProjectionExpressionétait ajoutée (ou l'inverse). - L'ancien
AttributesToGetcombiné avecSelect: COUNT. - Un générateur de requêtes qui attache toujours une projection, même quand l'appelant ne voulait qu'un décompte.
- Une mauvaise compréhension de
Select— s'attendre à ce queCOUNTrenvoie aussi les éléments qu'il a comptés.
Comment le corriger
- Tu comptes seulement ? Supprime la projection. Définis
Select: COUNTet retireProjectionExpression/AttributesToGet. - Tu as besoin d'attributs spécifiques ? Supprime
Select: COUNT. Fournis uneProjectionExpression; DynamoDB fixeSelectpar défaut àSPECIFIC_ATTRIBUTES, donc tu n'as généralement pas besoin de définirSelectdu tout. - Tu as besoin du décompte ET des éléments ? Fais un appel pour les éléments (avec ta projection) et lis son
Count, ou fais un appelSelect: COUNTséparé. - Préfère
ProjectionExpressionàAttributesToGet— AWS marqueAttributesToGetcomme paramètre legacy et recommandeProjectionExpressionà la place.
Tu veux juste un décompte rapide ou une vue projetée pendant que tu explores ? L'application de bureau DynoTable exécute des requêtes et affiche le nombre de correspondances sans que tu aies à assembler à la main des paramètres Select contradictoires.
Ouvre-le dans DynoTable
Le panneau de requête de DynoTable sépare le mode comptage de la projection — soit tu récupères des éléments avec des attributs sélectionnés, soit tu lis le nombre de correspondances, jamais les deux dans une même requête contradictoire. Ouvre une table avec ⌘K, lance une Query, et lis le nombre de résultats dans la barre d'état sans attacher de ProjectionExpression.
Sers-toi du Query Builder pour générer une requête en projection seule ou en comptage seul pour ton code SDK. Change de profil avec ⌘P ; configure-les sous Settings → Profiles avec Test Connection. Vois Se connecter à AWS et Installation.
Sources
- Query — Amazon DynamoDB API Reference (vérifié le 2026-07-13)
- AttributesToGet (legacy) (vérifié le 2026-07-13)
Erreurs liées
- Cannot use both expression and non-expression parameters — mélange de paramètres legacy et d'expression.
- Query key condition not supported — une condition de clé malformée sur la même requête.
- En savoir plus : Count, sum & aggregate · Projection expressions
Références
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- AttributesToGet (legacy) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.