目标是更新DynamoDB表中的属性之一。这是模式:
{
'job_id': {S: jobInfo.job_id} (partition_key),
'company': {S: jobInfo.company},
'title': {S: jobInfo.title},
'posted_on': {S: jobInfo.posted_on},
'clicks': {N: jobInfo.clicks}
}
该表的主键仅是partition_key,并且是job_id。现在我想增加clicks值,这是我的update param:
let params = {
TableName: 'jobPosts',
Key: {
"job_id": "57a08a5c-ca6c-4056-b892-dc9e6388adb9"
},
UpdateExpression: "add clicks :value",
ExpressionAttributeValues: {
":value": {N: "1"}
},
ReturnValues:"ALL_NEW"
};
ddb.updateItem(params, function(err, data) {
if (err) {
console.log("In DynamoDB error");
console.log(`Error: ${err}`);
} else {
console.log("In DynamoDB Success");
console.log(`Here is the data: ${data}`);
}
});
};
但是,我收到ValidationException错误,并显示消息提供的键元素与架构不匹配。这是完整的堆栈跟踪:
{
"message": "The provided key element does not match the schema",
"code": "ValidationException",
"time": "2019-11-17T04:23:11.495Z",
"requestId": "4327RBE0UEHSND9Q4M7K44AEEFVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 37.586092348332265
}
表没有复合主键。它只是partition_key。我不明白这里的问题。
Key={'job_id': {'S': "57a08a5c-ca6c-4056-b892-dc9e6388adb9"}}
这很令人困惑,但是在指定密钥时,您不仅必须指定作为密钥的字段,还必须指定密钥的类型。因此,在这种情况下,job_id的“值”是一个类型/值对,其中“ S”表示这是一个字符串类型,其中“ 57a08a5c-ca6c-4056-b892-dc9e6388adb9”是该字符串的值。这显示了不同类型的格式:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html