如何在DynamoDB中查询单个主键对应的所有排序键?
解决DynamoDB查询单个主键下所有排序键的问题
要查询单个分区键(PK)对应的所有排序键(SK)条目,正确的做法是仅在KeyConditionExpression中指定PK的相等条件,不需要额外添加SK的条件,DynamoDB的Query操作默认会返回该分区键下的所有排序键数据(前提是你的表是复合主键:PK为分区键,SK为排序键)。
正确代码示例
const command = new QueryCommand({ TableName: "MyTable", KeyConditionExpression: 'PK = :pk', ExpressionAttributeValues: { ":pk": tempPK, }, });
你的错误原因分析
第一种尝试的语法错误
你写的KeyConditionExpression: 'PK = :pk,少了结尾的单引号,属于字符串语法错误,导致参数解析失败,并非DynamoDB要求必须同时指定PK和SK。第二种尝试的运算符错误
KeyConditionExpression只允许使用特定的比较运算符(=、<、>、<=、>=、BETWEEN、BEGINS_WITH),attribute_exists这类函数只能用在FilterExpression里,不能放在键条件表达式中。第三种尝试的类型不匹配
用SK > :minSortKey且:minSortKey设为空字符串,若你的SK字段类型不是字符串(比如数字、二进制等),就会出现类型不匹配的错误,导致查询不被支持。
补充说明
如果你的表确实是复合主键结构,使用上面的正确代码就能获取该PK下的所有SK数据,无需额外条件。如果还是有问题,可以检查:
tempPK的类型是否和表中PK字段的类型完全一致(比如表中PK是字符串,tempPK不能是数字)- 表的主键定义是否正确(确认SK是排序键)
内容的提问来源于stack exchange,提问作者Auresol
相关产品推荐
相关产品推荐

