Dynamodb UpdateExpression:“删除#items [0]”追加新的列表元素吗?

时间:2019-08-16 01:54:14

标签: amazon-web-services amazon-dynamodb

我有一个包含列表items的Dynamodb表。给定指定的index(使用索引0进行测试),我正在寻找从此列表中删除元素:

docClient.update({
    TableName: 'cart',
    Key: { 'id': id },
    ReturnValues: 'ALL_NEW',
    UpdateExpression: "REMOVE #items[0]",
    ExpressionAttributeNames : {
        "#items": "items"
    }
},  function(err, data) {   
    })

它不是从项目列表中删除元素0,而是附加了一个新元素(地图)(请参阅最后一个附加元素的附件图片)

...我在做什么错?另外,我应该如何用一个变量代替上面的0?我尝试过:

...
UpdateExpression: "REMOVE #items[:index]",
ExpressionAttributeValues :
":index": index
},
...

...导致错误:Invalid UpdateExpression: Syntax error; token: \":index\", near: \"[:index]

非常感谢您!

dynamodb table

AWS-SDK:^ 2.500.0

节点:v10.16.0

- 编辑: 1)AWS SDK不支持将ExpressionAttributeValues与REMOVE一起使用,因此,我必须"REMOVE List[" + listNumber + "]"。 2)将UpdateExpression: "REMOVE #items[0]"更改为UpdateExpression: "REMOVE #i[0]" ExpressionAttributeValues : { ":i": items }正确删除了元素0;但是,DynamoDB仍将附加一个新列表元素Index : i,其中我是要删除的索引。

这是一个错误吗?

dynamodb appending items

1 个答案:

答案 0 :(得分:1)

我能够从cart_items字段中删除一个元素,如下所示-

表名- cart

这是我的数据-

{
  "id": "1",
  "cart_items": [
    "1", "2"
  ]
}

AWS CLI查询,从cart_items数组中删除第一个元素-

aws dynamodb update-item \
    --table-name cart \
    --key '{"id":{"S":"1"}}' \
    --update-expression "REMOVE cart_items[0]" \
    --return-values ALL_NEW