Amazon dynamodb DynamoDB更新-“;ValidationException:更新表达式中的操作数的数据类型不正确;

Amazon dynamodb DynamoDB更新-“;ValidationException:更新表达式中的操作数的数据类型不正确;,amazon-dynamodb,aws-sdk-js,aws-sdk-nodejs,Amazon Dynamodb,Aws Sdk Js,Aws Sdk Nodejs,我试图在DynamoDB表中附加到字符串集(字符串数组)列,该列可能存在,也可能不存在。我在写我的UpdateExpression时提到了很多问题,比如和 我的代码看起来像这样 const AWS=require('AWS-sdk') const dynamo=new AWS.DynamoDB.DocumentClient() 常数更新图={ //这张桌子肯定存在。 TableName:process.env.DYNAMO_TABLE_NAME, 关键:{ 电子邮件:user.email },

我试图在DynamoDB表中附加到字符串集(字符串数组)列,该列可能存在,也可能不存在。我在写我的UpdateExpression时提到了很多问题,比如和

我的代码看起来像这样

const AWS=require('AWS-sdk')
const dynamo=new AWS.DynamoDB.DocumentClient()
常数更新图={
//这张桌子肯定存在。
TableName:process.env.DYNAMO_TABLE_NAME,
关键:{
电子邮件:user.email
},
//该列可能存在,也可能不存在,这就是为什么我要将list_append与if_not_exists结合起来。
UpdateExpression:'SET#column=list_append(如果不存在(#column,:empty_list),:vals)',
表达式属性名称:{
“#列”:“项目”
},
表达式属性值:{
':vals':['test','test2'],
“:空列表”:[]
},
ReturnValues:“更新的\新的”
}
dynamo.update(updateParams.promise().catch((错误)=>{
log(`Error:${Error}`)
})
但是,我遇到了以下错误:
ValidationException:update表达式中的操作数的数据类型不正确
。我在这里做错了什么


[更新] 多亏了Nadav Har'El的回答,我能够通过修改参数来使用
ADD
操作,而不是
SET
来实现这一点

const updateParams={
TableName:process.env.DYNAMO_TABLE_NAME,
关键:{
电子邮件:user.email
},
UpdateExpression:“添加项:VAL”,
表达式属性值:{
“:vals”:dynamo.createSet(['test','test2'])
}
}

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


要将项目添加到字符串集,请使用
add
操作,而不是
set
操作。要添加的参数应该是一个集合(不是一个列表,我不知道指定它的魔法js语法,请检查您的文档)和一组元素。如果属性已经存在,这些元素将添加到属性中(删除重复项),如果属性尚未退出,则将设置为这些元素的集合。请参阅此处的文档:

你说得对,问题是我对字符串集列使用了
SET
操作。使用
添加
工作。非常感谢。