【问题标题】:DynamoDB update - "ValidationException: An operand in the update expression has an incorrect data type"DynamoDB 更新 - “ValidationException:更新表达式中的操作数具有不正确的数据类型”
【发布时间】:2020-06-13 20:33:25
【问题描述】:

我正在尝试追加到 DynamoDB 表中的字符串集(字符串数组)列,该列可能已经存在也可能不存在。在编写我的 UpdateExpression 时,我提到了诸如 thisthis 这样的问题。

我的代码如下所示。

const AWS = require('aws-sdk')
const dynamo = new AWS.DynamoDB.DocumentClient()

const updateParams = {
    // The table definitely exists.
    TableName: process.env.DYNAMO_TABLE_NAME,
    Key: {
      email: user.email
    },
    // The column may or may not exist, which is why I am combining list_append with if_not_exists.
    UpdateExpression: 'SET #column = list_append(if_not_exists(#column, :empty_list), :vals)',
    ExpressionAttributeNames: {
      '#column': 'items'
    },
    ExpressionAttributeValues: {
      ':vals': ['test', 'test2'],
      ':empty_list': []
    },
    ReturnValues: 'UPDATED_NEW'
}

dynamo.update(updateParams).promise().catch((error) => {
    console.log(`Error: ${error}`)
})

但是,我收到此错误:ValidationException: An operand in the update expression has an incorrect data type。我在这里做错了什么?


[更新] 感谢 Nadav Har'El 的回答,我能够通过修改参数以使用 ADD 操作而不是 SET 来使其工作。

const updateParams = {
    TableName: process.env.DYNAMO_TABLE_NAME,
    Key: {
      email: user.email
    },
    UpdateExpression: 'ADD items :vals',
    ExpressionAttributeValues: {
      ':vals': dynamo.createSet(['test', 'test2'])
    }
}

【问题讨论】:

    标签: amazon-dynamodb aws-sdk-js aws-sdk-nodejs


    【解决方案1】:

    liststring set 不是同一种类型 - string set 只能保存字符串,而 list 可以保存任何类型(包括嵌套列表和对象) ,元素类型不需要相同,列表也可以包含重复项。因此,如果您的原始项目确实如您所说的一个字符串集,而不是一个列表,这就解释了为什么这个操作不能工作。

    要将项目添加到字符串集中,请使用ADD 操作,而不是SET 操作。您将要添加的参数应该是一个包含一堆元素的集合(不是列表,我不知道指定这个的魔术 js 语法,检查您的文档)。如果属性已经存在,这些元素将被添加到它(删除重复项),如果属性尚未退出,它将被设置为这些元素的集合。请参阅此处的文档:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html#DDB-UpdateItem-request-UpdateExpression

    【讨论】:

    • 你说得对,问题是我在字符串集列上使用了SET 操作。使用ADD 有效。谢谢!
    猜你喜欢
    • 2017-04-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多