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_ATTRIBUTES。Select 的任何其他值都會返回一個錯誤。" 一個成本提示:COUNT 仍然消耗與實際獲取項目相同的讀取容量——它節省頻寬,而不是 RCU。
為什麼會發生
- 兩個引數同時設定——新增了
ProjectionExpression卻把Select: COUNT留在原處(或反之)。 - 舊的
AttributesToGet與Select: COUNT組合。 - 一個查詢構建器總是附加一個投影,即便呼叫方只想要一個計數。
- 誤解
Select——期望COUNT也把它計數的項目交回來。
如何修正
- 只是計數?去掉投影。 設定
Select: COUNT並移除ProjectionExpression/AttributesToGet。 - 需要特定屬性?去掉
Select: COUNT。 提供一個ProjectionExpression;DynamoDB 預設把Select設為SPECIFIC_ATTRIBUTES,因此你通常根本不用設定Select。 - 既需要計數又需要項目? 為項目做一次呼叫(帶你的投影)並讀取它的
Count,或者做一次單獨的Select: COUNT呼叫。 - 優先使用
ProjectionExpression而非AttributesToGet——AWS 把AttributesToGet標記為舊引數,並推薦改用ProjectionExpression。
只是想在探索時快速計數或檢視一個投影檢視?DynoTable 桌面應用會執行查詢並顯示匹配的計數,無需你手工拼裝相互衝突的 Select 引數。
在 DynoTable 中開啟
DynoTable 的查詢面板將計數模式與投影分開 - 你可以獲取具有選定屬性的項目或讀取匹配的計數,而絕不會在一個衝突的請求中同時執行這兩種操作。使用⌘K開啟一個表,執行Query,然後在狀態列中檢查結果計數,而不附加ProjectionExpression。使用 Query Builder 為你的 SDK 程式碼生成僅投影或僅計數請求。使用 ⌘P 切換設定檔案;在“設定”→“設定檔案”下使用“Test Connection”配置它們。參見連線 AWS和安裝。
來源
- Query — Amazon DynamoDB API Reference(2026-07-13 驗證)
- AttributesToGet (legacy)(2026-07-13 驗證)
相關錯誤
- Cannot use both expression and non-expression parameters——混用舊引數和運算式引數。
- Query key condition not supported——同一請求上一個格式錯誤的鍵條件。
- 學習:Count, sum & aggregate · Projection expressions
參考資料
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- AttributesToGet (legacy) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。