Amazon web services 下一个DynamoDB错误的原因是什么?

Amazon web services 下一个DynamoDB错误的原因是什么?,amazon-web-services,amazon-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

我在几个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”来解决问题。但问题不在于此。

没有称为键的参数。您需要改用
KeyConditionExpression

注意:我不知道为什么要使用if项,因为您是通过特定的主键而不是索引或排序键的表达式访问表的

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});
});

请出示你的问题。你是什么意思?回调的全部内容?@cramopy我对post进行了更改,提供了更多信息,正如我已经提到的,我使用“Key”参数访问同一个表,并使用相同的语法从另一个地方进行查询,它可以工作(我刚刚再次检查了它)。对于这样简单的情况,使用KeyConditionExpression、名称和值是毫无意义的。他们需要条件。我不需要条件,我有特定的键值。我很好奇,因为我真的没有在官方文档中找到“key”属性。但我从互联网上的一些例子(不是我的脑袋)中得到了它,它可以工作,但不是在所有情况下都可以(例如,它不适用于索引)。我只是想弄明白为什么。对我来说,我很好奇为什么你要用query代替get item,因为你是通过一个特定的主键访问表的,而不是索引或排序键的表达式:)这才是我真正需要的!我在读取doc时错过了get方法。Key在某些DynamoDB函数中是有效的参数,例如DeleteItem,但在查询中无效。