DynamoDB — The expression can not be empty

TL;DR — 你將一個 expression 參數(FilterExpressionKeyConditionExpressionProjectionExpressionUpdateExpressionConditionExpression)傳為空字串** ""。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。

如何修正

  1. 只在非空時設定該參數。 條件式地建立參數物件:if (filter) params.FilterExpression = filter; — 絕不指派 ""
  2. 在呼叫前刪除空的鍵 — 從請求中剝除任何值為空/空白字串的 expression 屬性。
  3. 防護你的 builder — 若條件列表為空,根本不要附加 expression。
  4. 記住它們是獨立的 — 當沒有 expression 使用它們時,ExpressionAttributeNames/Values 也應被省略(而非被無物參照的 {})。
  5. 對全表讀取,不帶 FilterExpressionScan 是正確的 — 省略該參數而非傳入空的。

在把查詢接進程式碼前製作原型?在 DynoTable 桌面應用程式中執行它們 — 它只送出你實際填入的 expression 參數,因此你不會出貨空字串 filter。

相關錯誤

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。