DynamoDB查询报错:缺少键架构元素daily_answers,求问题排查
DynamoDB查询报错"Query condition missed key schema element: daily_answers"的解决方法
你的核心问题是查询条件里的分区键字段名和表实际的键名不匹配:
你明确说明表的分区键是daily_answers,但代码的KeyConditionExpression里却写了partition_key = :pk——DynamoDB会把partition_key当作实际的字段名去查找,而你的表里根本没有这个字段,自然会报错提示缺少daily_answers这个键架构元素。
修改后的代码
把KeyConditionExpression里的partition_key替换成实际的分区键字段名daily_answers即可:
const sevenDaysAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); const sevenDaysAgoTs = Math.floor(sevenDaysAgo.getTime() / 1000); let dbQueryResult; // Query the last 7 days of answers const queryParams = { TableName: tableName, // 替换分区键字段名为实际的daily_answers KeyConditionExpression: 'daily_answers = :pk AND #ts >= :seven_days_ago', ExpressionAttributeNames: { '#ts': 'timestamp', }, ExpressionAttributeValues: { ':pk': 'daily_answers', ':seven_days_ago': sevenDaysAgoTs, }, ScanIndexForward: false, }; async function fetchAnswers() { try { const data = await dynamodb.query(queryParams).promise(); dbQueryResult = data.Items.map((item) => item.answers); } catch (err) { console.error('Error querying DynamoDB:', JSON.stringify(err, null, 2)); } } await fetchAnswers();
额外确认
如果你的表分区键字段名不是daily_answers(比如实际字段名是category,只是该字段的值为daily_answers),那你需要把KeyConditionExpression里的字段名改成实际的字段名(比如category = :pk),同时保持:pk的值为daily_answers。但根据你的描述,分区键就是daily_answers,所以上面的修改就能解决问题。
内容的提问来源于stack exchange,提问作者axordahaxor
相关产品推荐
相关产品推荐

