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
相关产品推荐
相关产品推荐

