我已经尝试了 SO 中提供的多种解决方案,但遇到了一个验证错误: 这是我的 table :
var params = {
AttributeDefinitions: [
{
AttributeName: 'USER_AUTH_ID',
AttributeType: 'N'
},
{
AttributeName: 'EMAIL',
AttributeType: 'S'
}
],
KeySchema: [
{
AttributeName: 'EMAIL',
KeyType: 'HASH'
},
{
AttributeName: 'USER_AUTH_ID',
KeyType: 'RANGE'
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
},
TableName: tableName,
StreamSpecification: {
StreamEnabled: false
}
};
我已经使用 putItem 成功地创建了项目,但是在附加到列表时遇到了问题:
这是我要更新的项目:
var paramUpdateItem = {
TableName: tableName,
Key: {
'EMAIL' : {S: 'MyEmail@email.com'}
},
UpdateExpression: "SET #Y = list_append(#Y,:y)",
ExpressionAttributeNames: {
"#Y" : "COMMENT_HISTORY"
},
ExpressionAttributeValues: {
":y" : [commentToAdd]
}
}
;
然后我使用 updateItem
进行更新。
我一直收到这个错误:
null: Error: Unexpected key '0' found in params.ExpressionAttributeValues[':y']
我在另一个问题中读到这是由于制表符引起的,但我已尝试修复它但仍然出现此错误。
任何帮助。 谢谢。
最佳答案
我想不出两个选项。一个是这是一个库错误,正如您所说,它可能是“由于制表符”,例如,请参阅此问题声称这是一个带有空格的错误并建议解决方法:
https://github.com/aws/aws-sdk-js/issues/2546
另一种选择是您使用的是低级 API(您没有说明您是如何进行查询的)。在低级 API 中,您不能只说 {":y": [commentToAdd]}。你要说这个列表,其实就是一个列表,它的组成部分是什么类型。类似于 {':y': {'L': [{'S', 'word1'}, {'S', 'word2'} ] }。
关于javascript - 更新 DynamoDB 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56721506/