在DynamoDB中更新列表

时间:2019-06-23 06:16:58

标签: javascript node.js amazon-dynamodb

我尝试了许多在SO中给出的解决方案,但是遇到一个验证错误的麻烦: 这是我的桌子:

flyway.repair();

我已经使用putItem成功创建了项目,但是在追加到列表时遇到了麻烦:

这是我要更新的项目:

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

;

然后我用var paramUpdateItem = { TableName: tableName, Key: { 'EMAIL' : {S: 'MyEmail@email.com'} }, UpdateExpression: "SET #Y = list_append(#Y,:y)", ExpressionAttributeNames: { "#Y" : "COMMENT_HISTORY" }, ExpressionAttributeValues: { ":y" : [commentToAdd] } } 更新。

我不断收到此错误:

  

null:错误:在中发现意外的键“ 0”   params.ExpressionAttributeValues [':y']

我在另一个问题中读到这是由于制表符引起的,但我试图修复它,但仍然出现此错误。

任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:3)

我想不出两个选择。一个是这是一个库错误,正如您所说的那样,可能是“由于制表符引起的”,例如,请参阅此问题,声称这是空白错误,并建议解决方法:

https://github.com/aws/aws-sdk-js/issues/2546

另一个选择是您正在使用低级API(您没有显示查询的方式)。在低级API中,您不能只说{“:y”:[commentToAdd]}。您需要说的是,该列表实际上是一个列表,它的组成部分是什么类型。像{':y':{'L':[{'S','word1'},{'S','word2'}]}之类的东西。