我有下一个代码在几个 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/