“在Dynamo dB的Get操作中缺少参数中所需的键'Key'

时间:2017-03-23 06:39:13

标签: node.js amazon-dynamodb

我正在将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

3 个答案:

答案 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上发出查询请求,查找您需要的年份和月份,以查找已加入的查询请求。