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 官方文档。