我的DynamoDB中有一个名为JuridicalPerson
的表
var params = {
AttributeDefinitions: [{
AttributeName: 'code',
AttributeType: 'S'
}],
KeySchema: [{
AttributeName: 'code',
KeyType: 'HASH'
}],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
},
TableName: 'JuridicalPerson'
}
我可以在那里保存项目,但我无法更新这些项目。
我的JuridicalPerson表格中的项目示例
{
"code": {
"S": "jp_rJaHvVrzf"
},
"status": {
"S": "pending"
}
}
更新表达
function updateDynamoDB (payload) {
const adhesionUpdate = Object.assign({}, payload)
return new Promise((resolve, reject) => {
const params = {
TableName: 'JuridicalPerson',
Key: {
'code': {
'S': adhesionUpdate.code
}
},
UpdateExpression: 'SET #status = :val1',
ExpressionAttributeNames: {
'#status': 'status'
},
ExpressionAttributeValues: {
':val1': { 'S': adhesionUpdate.status }
},
ReturnValues: 'ALL_NEW'
}
return dynamoAdapter.getState().update(params, (err, items) => {
if (err) {
return reject(err)
}
return resolve(items)
})
})
}
如果我在更新前加console.log
只是为了查看params
,我们有
params: { TableName: 'JuridicalPerson',
Key: { code: { S: 'jp_rJaHvVrzf' } },
UpdateExpression: 'set #status = :val1',
ExpressionAttributeNames: { '#status': 'status' },
ExpressionAttributeValues: { ':val1': { S: 'active' } },
ReturnValues: 'ALL_NEW' }
但我收到以下错误
err: { ValidationException: Invalid attribute value type
message: 'Invalid attribute value type',
code: 'ValidationException',
time: 2017-12-18T12:40:39.488Z,
requestId: 'bc23aab1-d9a5-426f-a1af-3ff558e7e0fa',
statusCode: 400,
retryable: false,
retryDelay: 41.054909592801195 }
答案 0 :(得分:2)
在使用DynamoDb客户端而不是DynamoDb资源时,我有相同的模棱两可的错误消息。
DDB客户端接受简短形式key: value
的值定义,而不接受DDB资源key: {'S': value}
接受的显式类型形式。
在您的示例中,尝试使用:
const params = {
TableName: 'JuridicalPerson',
Key: {
'code': adhesionUpdate.code
},
UpdateExpression: 'SET #status = :val1',
ExpressionAttributeNames: {
'#status': 'status'
},
ExpressionAttributeValues: {
':val1': adhesionUpdate.status
},
ReturnValues: 'ALL_NEW'
}