DynamoDB — The expression can not be empty
TL;DR — 你將一個 expression 參數(FilterExpression、KeyConditionExpression、ProjectionExpression、UpdateExpression 或 ConditionExpression)傳為空字串** ""。DynamoDB 要求 expression 參數要嘛是有效的非空 expression,要嘛完全不存在 — 空字串是無效的。只在你確實有 expression 時才包含該參數;否則省略該鍵。**
這是什麼意思
ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;DynamoDB 對空字串與省略的參數處理不同。省略 FilterExpression 表示「無 filter」;傳入 FilterExpression: "" 表示「這裡有一個 filter」— 然後沒有東西可解析,因此驗證失敗。同樣適用於每個 expression 參數。
為什麼會發生
- 條件式建立的參數總是被設定 — 程式碼總是將
FilterExpression附加到請求物件,然後在沒有選擇 filter 時將它留為""。 - 輔助工具/ORM/連接器在 filter 列表為空時發出空的 expression 字串,而非丟棄該鍵。
- 產生空白的字串串接 — 連接一個空的條件陣列產生
""。 - 被修剪掉的內容 — 佔位符被剝除,留下空的 expression。
如何修正
- 只在非空時設定該參數。 條件式地建立參數物件:
if (filter) params.FilterExpression = filter;— 絕不指派""。 - 在呼叫前刪除空的鍵 — 從請求中剝除任何值為空/空白字串的 expression 屬性。
- 防護你的 builder — 若條件列表為空,根本不要附加 expression。
- 記住它們是獨立的 — 當沒有 expression 使用它們時,
ExpressionAttributeNames/Values也應被省略(而非被無物參照的{})。 - 對全表讀取,不帶
FilterExpression的Scan是正確的 — 省略該參數而非傳入空的。
在把查詢接進程式碼前製作原型?在 DynoTable 桌面應用程式中執行它們 — 它只送出你實際填入的 expression 參數,因此你不會出貨空字串 filter。
相關錯誤
- Query key condition not supported — 格式不正確(非空)的
KeyConditionExpression。 - Invalid UpdateExpression syntax — 非空但格式不正確的 update expression。
- 學習:Filtering strategies · Key condition expressions
References
- Using expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。