我正在将node.js中的Lambda函数写入来自dynamodB的getitems。表是员工,其中emo_Id是分区键。以下是我写的代码片段:
var table = "Employee_Test";
var emp_Id=event.emp_Id;
var emp_Name=event.emp_Name;
var params = {
TableName: table,
KeyConditionExpression: "#eId = :Id",
ExpressionAttributeNames:{
"#eId": "emp_Id"
},
ExpressionAttributeValues: {
":Id":emp_Id
}}
我得到的错误是: “消息”:“在参数中缺少必需的密钥'密钥'”, “code”:“MissingRequiredParameter”,
我知道错误的解决方法是添加: 键:{ “emp_Id”:emp_Id, 代码。但是如果我必须查询在特定日期之后加入的员工,那么我就不能提供emp_Id作为参数。
在AWS发行说明中,我发现我们可以禁用参数验证, https://aws.amazon.com/releasenotes/6967335344676381我试过了,但这也无效。
有人可以帮忙吗?
由于 Shweta
答案 0 :(得分:6)
查询二级索引时遇到了同样的错误。事实证明我使用的是错误的API。在getItem和Query之间混淆。
答案 1 :(得分:1)
当我第一次使用DynamoDb时遇到了这个问题。如此烦人的错误。原来我不小心使用了先前工作的.get
示例中的getById
方法,而不是.query
方法。
简而言之,您可能只需要更改 this ...
const response = await db.get(query).promise();
...对此...
const response = await db.query(query).promise();
答案 2 :(得分:0)
向表中添加全局二级索引,以便按开始日期启用查找。首先,更改项目创建代码(PutItem)以添加表示员工加入的月份和年份的属性,例如joinYearMonth = 201612。其次,扫描您的表以查找尚未具有此属性的项目并添加它。第三,创建一个全局二级索引,其分区键为joinYearMonth,排序键为joinTimestamp。这样,您可以在GSI上发出查询请求,查找您需要的年份和月份,以查找已加入的查询请求。