我正在尝试使用updateExpression更新项目,并且我想编辑属性并删除同一对象上的另一个属性,但是我收到以下错误:
无效的UpdateExpression:语法错误;令牌:EOF附近:“attributeToDelete”
我必须承认我写了更新表达式,猜测使用它的正确方法(失败)。这是代码片段:
dynamodb.updateAsync({
TableName: `myTable`,
Key: { id: req.params.id },
UpdateExpression: 'SET attributeToEdit = :newValue DELETE attributeToDelete',
ExpressionAttributeValues: { ':newValue': 'valueToSet' },
})
当我想要包含多个动作时,我应该如何编写UpdateExpression? (其中的操作是 - > SET,DELETE,REMOVE,ADD)
答案 0 :(得分:15)
使用DELETE
而不是DELETE。 UpdateExpression: 'SET attributeToEdit = :newValue REMOVE attributeToDelete',
用于从SET中删除元素。
"aoColumnDefs":[
{
"mData": null,
"bSortable": false,
"bSearchable": false,
"fnRender": function (oObj) {
return '<img src="/Content/images/details_open.png" alt="expand/collapse" rel="' + oObj.aData[0] + '" />';
}
},
{ "mData": 0 },
{ "mData": 1 },
{ "mData": 2 },
{ "mData": 3 }
]
删除 - 从项目中删除一个或多个属性。
答案 1 :(得分:0)
我在这方面挣扎了很长时间,所以我想第二个例子可能对未来的搜索者有所帮助。这个例子使用CakePHP,Marshal JSON,SET和ADD,并包含变量以显示几种不同的方法来获得你想要的东西。你显然也会传入调用它的整个函数中的所有变量。
$key = $this->marshaler->marshalJson('
{
"field_one": ' . $variableOne . '
}
');
if ($criteriaOne === null) {
$add = $this->marshaler->marshalJson('
{"0":{
"field_two": ' . $variableTwo . ',
"field_three": "' . $variableThree . '"
}}
');
} else {
$add = $this->marshaler->marshalJson('
{"0":{
"field_two": ' . $variableTwo . ',
"field_three": "' . $variableThree . '"
"field_four": "null"
}}
');
}
$eav = [
":vals" => [
"L" => [$add[0]]
],
":vals1" => [
"NS" => ["$variableTwo"]
]
];
$ean = [
"#co" => "column_one",
"#ct" => "column_two"
];
return [
'TableName' => 'Dynamo_Table_Name',
'Key' => $key,
'UpdateExpression' =>
'SET #co = list_append(:vals, #co) ADD #ct :vals1',
'ExpressionAttributeNames' => $ean,
'ExpressionAttributeValues' => $eav,
'ReturnValues' => 'ALL_NEW'
];