You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB GSI带FilterExpression查询报错::isAct未定义

解决DynamoDB GSI查询中FilterExpression的表达式属性值未定义错误

看了你的报错信息和查询日志,问题出在布尔值的属性值格式上——虽然日志里明确显示:isAct已经定义,但DynamoDB没能正确识别它的类型格式,尤其是如果你使用的是DocumentClient(大部分开发者会优先用这个简化客户端)的话,手动指定BOOL类型会导致解析异常。

修正后的查询代码

把:isAct的值从{BOOL: true}改成原生布尔值true即可:

var tableQuery = { 
  TableName: "posts", 
  KeyConditionExpression: "#wy = :wkYr", 
  FilterExpression: "#ac = :isAct", 
  IndexName: "weekYear-date-index", 
  ScanIndexForward: false, 
  Limit: 50, 
  ExpressionAttributeNames: { "#wy": "weekYear", "#ac": "isActive" }, 
  ExpressionAttributeValues: { ":wkYr": cWeekYear, ":isAct": true } 
};

为什么之前的写法会报错?

如果你用的是AWS.DynamoDB.DocumentClient(官方推荐的客户端,自动处理数据类型的序列化/反序列化),它期望你传入原生JavaScript类型(比如true、"string"、123),会自动帮你转换成DynamoDB要求的AttributeValue格式(比如{BOOL: true}、{S: "string"})。

只有当你直接使用低级的AWS.DynamoDB客户端时,才需要手动用{BOOL: true}这种格式指定类型。

额外验证点

  • 确认你的GSI weekYear-date-index是否包含isActive属性?虽然FilterExpression可以过滤表中任意属性(无论是否在GSI中),但确认一下能避免后续其他问题。
  • 检查拼写:你的ExpressionAttributeNames、FilterExpression里的变量映射都是正确的,这部分没问题。

内容的提问来源于stack exchange,提问作者ZetaPR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:19:11