DynamoDB查询CLI正常Lambda报错:'key'字段为null不符合约束
问题分析与解决方法
错误原因
- 命令类型误用:CLI中执行的是
query查询操作,但Lambda代码里用了GetCommand。GetCommand是通过主键获取单条数据的命令,必须指定Key参数,这就是报错Value null at 'key' failed to satisfy constraint的直接原因,你需要用对应query操作的QueryCommand。 - 数据类型不匹配:CLI里指定
completed是数字类型({"N":"0"}),但代码中传的是字符串'0',即使换了命令也可能查不到目标数据。
修正后的代码
import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import { DynamoDBDocumentClient, QueryCommand } from '@aws-sdk/lib-dynamodb'; const ddbClient = new DynamoDBClient({}); const ddbDocClient = DynamoDBDocumentClient.from(ddbClient); const ddbCommand = new QueryCommand({ TableName: 'BatchTable', IndexName: 'completed_index', KeyConditionExpression: 'completed = :completed', ExpressionAttributeValues: { ':completed': 0, // 改为数字类型,匹配DynamoDB中的N类型 }, }); const ddbResponse = await ddbDocClient.send(ddbCommand);
关键修改点
- 把
GetCommand替换为QueryCommand,对应CLI的query操作逻辑 - 将
:completed的值从字符串'0'改为数字0,匹配DynamoDB中存储的数字类型
内容的提问来源于stack exchange,提问作者Nelfo
相关产品推荐
相关产品推荐

