DynamoDB — cannot specify projection when Select is COUNT
TL;DR — Deine Query/dein Scan hat Select: COUNT und eine ProjectionExpression gesetzt (oder das alte AttributesToGet). COUNT liefert nur die Anzahl passender Items zurück, nie die Items selbst; Attribute zu benennen, die zurückkommen sollen, ist also widersprüchlich — DynamoDB lehnt es ab. Entscheide dich: Select: COUNT ohne Projektion, oder eine Projektion mit Select: SPECIFIC_ATTRIBUTES (der Standard, sobald du eine ProjectionExpression mitgibst).
Was es bedeutet
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(Das ist die Meldung mit dem veralteten AttributesToGet-Parameter; mit ProjectionExpression unterscheidet sich die Formulierung, aber die Regel ist dieselbe.) Select steuert, was ein Read zurückgibt. COUNT bittet DynamoDB um eine Zählung (Count/ScannedCount) und keine Item-Daten. Eine ProjectionExpression/AttributesToGet bittet um bestimmte Attribute der zurückgegebenen Items. Diese beiden schließen sich gegenseitig aus — die Query-API-Referenz stellt es klar: "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." Ein Kostenhinweis: COUNT verbraucht trotzdem dieselbe Read-Kapazität wie das tatsächliche Abrufen der Items — es spart Bandbreite, nicht RCUs.
Warum es passiert
- Beide Parameter gleichzeitig gesetzt —
Select: COUNTbelassen, während eineProjectionExpressionhinzugefügt wurde (oder umgekehrt). - Veraltetes
AttributesToGetkombiniert mitSelect: COUNT. - Ein Query-Builder, der immer eine Projektion anhängt, selbst wenn der Aufrufer nur eine Zählung wollte.
- Missverständnis von
Select— die Erwartung, dassCOUNTauch die gezählten Items zurückgibt.
So behebst du es
- Nur zählen? Lass die Projektion weg. Setze
Select: COUNTund entferneProjectionExpression/AttributesToGet. - Bestimmte Attribute nötig? Lass
Select: COUNTweg. Übergib eineProjectionExpression; DynamoDB setztSelectstandardmäßig aufSPECIFIC_ATTRIBUTES, sodass duSelectnormalerweise gar nicht setzt. - Sowohl die Zählung als auch die Items nötig? Mache einen Aufruf für die Items (mit deiner Projektion) und lies dessen
Count, oder mache einen separatenSelect: COUNT-Aufruf. - Bevorzuge
ProjectionExpressiongegenüberAttributesToGet— AWS markiertAttributesToGetals veralteten Parameter und empfiehlt stattdessenProjectionExpression.
Willst du beim Erkunden nur schnell eine Zählung oder eine projizierte Ansicht? Die DynoTable-Desktop-App führt Abfragen aus und zeigt die Übereinstimmungsanzahl, ohne dass du widersprüchliche Select-Parameter von Hand zusammenbaust.
In DynoTable öffnen
DynoTable's query panel separates count mode from projection — you either fetch items with selected attributes or read the matched count, never both in one conflicting request. Öffne eine Tabelle mit ⌘K, run a Query, and check the result count in the status bar without attaching a ProjectionExpression.
Nutze den Query Builder to generate a projection-only or count-only request for your SDK code. Wechsle Profile mit ⌘P; konfiguriere sie unter Einstellungen → Profile mit Verbindung testen. Siehe Mit AWS verbinden und Installation.
Quellen
- Query — Amazon DynamoDB API Reference (verifiziert 2026-07-13)
- AttributesToGet (legacy) (verifiziert 2026-07-13)
Verwandte Fehler
- Cannot use both expression and non-expression parameters — Vermischen von Legacy- und Expression-Parametern.
- Query key condition not supported — eine fehlerhafte Schlüsselbedingung im selben Request.
- Learn: Count, Summe & Aggregation · Projection-Expressions
Referenzen
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- AttributesToGet (legacy) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.