我有一个场景,我想创建一个项目,如果它不存在,或者更新一个项目 - 增加一个项目,如果它已经存在。
我遇到了分裂这两个操作的问题,所以我现在尝试在一个命令中使用UpdateItem进行这两个操作。
我尝试了3种不同的方法,但是下面列出了不同的错误,看起来问题就是创建地图并尝试在一个命令中更新它 - 我的更新参数应该是什么样的? / p>
尝试一个:
{
TableName: TableName,
Key: {
'key': key
},
UpdateExpression: `
ADD #total :change
, mapname.#type.#total :one
`,
ExpressionAttributeValues: {
':change': change,
':one': 1
},
ExpressionAttributeNames: {
'#type': 'dynamicstring',
'#total': 'total'
}
};
错误为:ValidationException: The document path provided in the update expression is invalid for update
尝试二:
{
TableName: TableName,
Key: {
"key": key
},
UpdateExpression: `
SET custommap = if_not_exists(custommap, :emptyMap)
SET #total = #total + :change,
custommap.#type.#total = custommap.#type.#total + :one
`,
ExpressionAttributeValues: {
':change': change,
':one': 1,
':emptyMap': {
'M': {
'dynamicstring': {
'M': {
'total': {
'N': 0
}
}
}
}
}
},
ExpressionAttributeNames: {
'#type': 'dynamicstring',
'#total': 'total'
}
}
错误为:ValidationException: Invalid UpdateExpression: The "SET" section can only be used once in an update expression;
因此,当我使用UpdateItem在Item中创建或更新(增加)一个地图时,哪种语法是正确的?
由于
答案 0 :(得分:0)
SET只会阻止你覆盖一个属性,而不是一个项目。
他们实现这一目标的方法是: