amazon-web-services - 下一个 DynamoDB 错误的原因可能是什么?

标签 amazon-web-services amazon-dynamodb

我有下一个代码在几个 lambda 中使用 docClient 访问 DynamoDB:

params = {
    TableName : tableName,
    Key: {
        publisherId: publisherId, // partition part
        id: publicationId // sort part
    }
};

docClient.query(params, (err, data) => {
    //simplified for debugging purposes
    callback({ err: err, params: params, data: data});
});

问题是这段代码在某些地方工作得很好,但在其他地方却返回错误。这种情况下的完整回调结果是:

{
    "err": {
        "message": "Either the KeyConditions or KeyConditionExpression parameter must be specified in the request.",
        "code": "ValidationException",
        "time": "2018-04-05T06:54:28.542Z",
        "requestId": "ELEG6OB4L0RIJ5T4JL3MGUFJQNVV4KQNSO5AEMVJF66Q9ASUAAJG",
        "statusCode": 400,
        "retryable": false,
        "retryDelay": 4.5118545729119
    },
    "params": {
        "TableName": "publications",
        "Key": {
            "publisherId": "8a47530c-c1d9-4dc4-95b5-809361ae27c2",
            "id": "019b0d50-37e4-11e8-9972-9997bb75950e"
        }
    },
    "data": null
}

这可能是什么原因(如果我确定键值是正确的)? 当然,我可以更改代码以在每个地方使用“KeyConditionExpression”和“ExpressionAttributeValues”来解决问题。但问题不是这个。

最佳答案

Query 没有名为 Key 的参数。您需要改用KeyConditionExpression

注意:我不确定您为什么使用 query相反,如果 get item,因为您是通过特定主键访问表,而不是通过排序键的索引或表达式。

params = {
    TableName: "tableName",
    KeyConditionExpression: "#P = :p AND #ID = :id",
    ExpressionAttributeNames: {
        "#P": "publisherId",
        "#ID": "id"
    },
    ExpressionAttributeValues: {
        ":p": publisherId,     // Partition key
        ":id": publicationId  // Sort key
    }
};

docClient.query(params, (err, data) => {
    //simplified for debugging purposes
    callback(null, {err, data});
});

关于amazon-web-services - 下一个 DynamoDB 错误的原因可能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49666006/

相关文章:

amazon-dynamodb - AppSync 中使用 IAM 身份验证的组授权

mysql - MySQL 中的 CASE 强制列数据类型为 BIGINT 而不是 INT

amazon-web-services - Amazon ECS 中的运行状况检查实际上是如何工作的?

amazon-dynamodb - 在 FilterExpression 中传递包含的搜索字符串列表

c# - DynamoDb .AsyncSearch<T>.GetRemainingAsync 随机挂起

amazon-dynamodb - DynamoDB 和用户登录表

amazon-web-services - AWS Cloudfront 和 Route53

amazon-ec2 - 保护Amazon EC2 + EBS的步骤

java - DynamoDb.创建时有条件写入。通过字段检查是否不等于(NE)

amazon-dynamodb - 键值存储相对于 Bigtable 有什么好处?