Value provided in ExpressionAttributeValues unused in expressions
TL;DR — Du hast in ExpressionAttributeValues einen Wertplatzhalter übergeben (z. B. :status), den keine Expression referenziert. DynamoDB verlangt, dass jeder deklarierte :value in einer KeyConditionExpression, FilterExpression, UpdateExpression oder ConditionExpression benutzt wird. Entferne den verwaisten Wert — oder repariere die Expression, die ihn benutzen sollte.
Was es bedeutet
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in
expressions: keys: {:status}
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in expressions: keys: {:status}ExpressionAttributeValues ist die Substitutions-Map für die literalen Werte, mit denen deine Expressions vergleichen (:status, :min, …). DynamoDB erzwingt einen Zwei-Wege-Vertrag: jeder :placeholder, der in einer Expression verwendet wird, muss deklariert sein, und jeder deklarierte Platzhalter muss verwendet werden. Ein übrig gebliebener Wert, den keine Expression referenziert, löst diese HTTP-400-ValidationException aus — clientseitig und nicht wiederholbar, bis die Maps übereinstimmen.
Warum es passiert
- Ein veralteter Wert nach dem Bearbeiten der Expression — du hast
#s = :statusaus der Expression entfernt, aber:statusin der Werte-Map gelassen. - Copy-Paste-Drift — Wiederverwendung einer Werte-Map aus einer früheren Anfrage, die mehr Bedingungen hatte als die aktuelle.
- Eine generierte Anfrage, die überdeklariert — ein Builder fügte
:vfür eine Filter-Klausel hinzu, die später entfernt wurde. - Eine Namen-vs-Werte-Verwechslung — du meintest
#status(einen Namens-Alias), hast aber:status(einen Wert) deklariert. - Ein Tippfehler — die Expression verwendet
:stat, während die Map:statusdeklariert.
So behebst du es
- Lösch den ungenutzten Wert, den die Meldung nennt, aus
ExpressionAttributeValues. - Halte die Werte im Gleichschritt mit der Expression — deklarier einen
:platzhalternur dann, wenn eine Expression ihn referenziert. - Kontrollier Namen gegen Werte —
:-Platzhalter gehören inExpressionAttributeValues,#-Aliase inExpressionAttributeNames. - Bau die Expression und ihre Maps zusammen, damit kein Wert übrig bleibt.
- Such im Expression-String nach jedem
:keydeiner Map. Ein Tippfehler von einem Zeichen (:statstatt:status) lässt den deklarierten Wert ungenutzt.
In DynoTable abfragen
DynoTable generates ExpressionAttributeValues from the filter rows you configure — every :placeholder in the output is referenced in the expression string. Öffne eine Tabelle mit ⌘K, add filters in the query panel, and copy the emitted maps into your SDK call to eliminate orphan values.
When debugging a failing request, paste the expression into the Expression Builder and compare its value map to yours. Profilwechsel (⌘P) and Verbindung testen on Einstellungen → Profile confirm you are testing against the same table. Siehe Mit AWS verbinden und Installation.
Quellen
- Using expression attribute values in DynamoDB (verifiziert 2026-07-13)
- DynamoDB condition expression examples (verifiziert 2026-07-13)
Verwandte Fehler
- Value provided in ExpressionAttributeNames unused in expressions — dieselbe Regel für
#name-Aliase. - ExpressionAttributeValues contains invalid value — ein fehlerhafter oder leerer Wert in der Map und der umgekehrte Mismatch: ein
:placeholder, der referenziert, aber nie geliefert wird. - The provided expression refers to an attribute that does not exist in the item — die Expression liest ein Item-Attribut, das nicht da ist.
- Learn: Expression-Namen & -Werte
Referenzen
- Using expression attribute values in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB condition expression examples — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
Zuletzt verifiziert am 2026-07-13 gegen die offizielle, oben verlinkte AWS-Dokumentation.