我有一个包含列表 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
,而是附加一个新元素( map )(请参阅最后附加元素的附图)
...我做错了什么?另外,我应该如何用一个变量代替上面的 0?我试过:
...
UpdateExpression: "REMOVE #items[:index]",
ExpressionAttributeValues :
":index": index
},
...
...导致错误:Invalid UpdateExpression: Syntax error;标记:\":index\",附近:\"[:index]
非常感谢!
AWS-SDK:^2.500.0
节点:v10.16.0
--
编辑:
1) AWS SDK 不支持带 REMOVE 的 ExpressionAttributeValues
,因此我必须改为 "REMOVE List["+ listNumber + "]"
。
2) 将 UpdateExpression: "REMOVE #items[0]"
更改为 UpdateExpression: "REMOVE #i[0]"
for
ExpressionAttributeValues : { ":i": items }
正确删除了元素 0;但是,DynamoDB 仍在附加一个新的列表元素 Index : i
,其中 i 是我要删除的索引。
这是一个错误吗?
最佳答案
我能够从 cart_items
字段中删除一个元素,如下所示 -
表名- 购物车
这是我的数据-
{
"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
关于amazon-web-services - Dynamodb 更新表达式 : "REMOVE #items[0]" appends new list element?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518066/