DynamoDB — cannot specify projection when Select is COUNT

TL;DR — 你的 Query/Scan 設定了 Select: COUNT 和一個 ProjectionExpression(或舊的 AttributesToGet)。COUNT 只返回匹配項目的數量,從不返回項目本身,因此指定要返回的屬性是自相矛盾的——DynamoDB 會拒絕它。二選一:不帶投影的 Select: COUNT,或者帶 Select: SPECIFIC_ATTRIBUTES 的投影(當你提供 ProjectionExpression 時的預設值)。

這是什麼意思

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

(這是使用舊的 AttributesToGet 引數時的訊息;使用 ProjectionExpression 時措辭不同,但規則相同。)Select 控制一次讀取返回什麼。COUNT 向 DynamoDB 請求一個計數(Count/ScannedCount)而沒有項目資料。ProjectionExpression/AttributesToGet 請求返回項目的特定屬性。這兩者互斥——Query API 參考寫得很清楚:"如果你使用 ProjectionExpression 引數,那麼 Select 的值只能是 SPECIFIC_ATTRIBUTESSelect 的任何其他值都會返回一個錯誤。" 一個成本提示:COUNT 仍然消耗與實際獲取項目相同的讀取容量——它節省頻寬,而不是 RCU。

為什麼會發生

  • 兩個引數同時設定——新增了 ProjectionExpression 卻把 Select: COUNT 留在原處(或反之)。
  • 舊的 AttributesToGetSelect: COUNT 組合。
  • 一個查詢構建器總是附加一個投影,即便呼叫方只想要一個計數。
  • 誤解 Select——期望 COUNT 也把它計數的項目交回來。

如何修正

  1. 只是計數?去掉投影。 設定 Select: COUNT 並移除 ProjectionExpression/AttributesToGet
  2. 需要特定屬性?去掉 Select: COUNT 提供一個 ProjectionExpression;DynamoDB 預設把 Select 設為 SPECIFIC_ATTRIBUTES,因此你通常根本不用設定 Select
  3. 既需要計數又需要項目? 為項目做一次呼叫(帶你的投影)並讀取它的 Count,或者做一次單獨的 Select: COUNT 呼叫。
  4. 優先使用 ProjectionExpression 而非 AttributesToGet——AWS 把 AttributesToGet 標記為舊引數,並推薦改用 ProjectionExpression

只是想在探索時快速計數或檢視一個投影檢視?DynoTable 桌面應用會執行查詢並顯示匹配的計數,無需你手工拼裝相互衝突的 Select 引數。

在 DynoTable 中開啟

DynoTable 的查詢面板將計數模式與投影分開 - 你可以獲取具有選定屬性的項目或讀取匹配的計數,而絕不會在一個衝突的請求中同時執行這兩種操作。使用⌘K開啟一個表,執行Query,然後在狀態列中檢查結果計數,而不附加ProjectionExpression。使用 Query Builder 為你的 SDK 程式碼生成僅投影或僅計數請求。使用 ⌘P 切換設定檔案;在“設定”→“設定檔案”下使用“Test Connection”配置它們。參見連線 AWS安裝

來源

相關錯誤

參考資料

最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。

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

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。