【问题标题】:Move an item within a DynamoDB list在 DynamoDB 列表中移动项目
【发布时间】:2021-05-03 22:44:05
【问题描述】:

我在 DynamoDB 表中有一个列表,并且想将项目移动到同一个列表中的不同位置,有没有办法在一次更新中做到这一点?

目前,我正在考虑必须阅读列表,对其进行修改,然后再次将其写回,但我更愿意在一次更新中完成所有操作,有没有办法做到这一点?

编辑以添加示例

所以这里有一些点头数据表明我想做什么:

如果数据是这样开始的:

Item: { COLUMN: [ "Element_0", "Element_1", "Element_2", "Element_3" ] }

然后我会给它fromto 索引,它会移动元素。因此,例如,如果我给它一个索引为 0 的 from 和索引为 2 的to,那么数据最终应该是这样的:

Item: { COLUMN: [ "Element_1", "Element_2", "Element_0", "Element_3" ] }

【问题讨论】:

  • 我假设您的意思是单个项目中的列表。你能给出示例数据吗?表中的项目是什么样的?更新时你有什么信息?期望的最终状态是什么?
  • 是的,没错,找到列表的所有信息都可用,它只是单个项目中的一个列表

标签: amazon-dynamodb dynamodb-queries


【解决方案1】:

您可以使用Update Expression 执行此操作,但这有点棘手,因为您没有数据。

基本上,您必须创建一个动态更新语句来设置您想要移动的每个值。这样的工作:

aws dynamodb update-item --table-name test --key '{"pk":{"S":"1"}}' --update-expression "SET #list[1] = #list[2], #list[2] = #list[1]" --region us-west-2 --profile jw-test --expression-attribute-names '{"#list": "list"}'

我创建了一个表,其键为pk,值为1。更新前的list是这样的:

[
'one',
'two',
'three',
'four'
]

更新后是这样的:

[
'one',
'three',
'two',
'four'
]

【讨论】:

  • 嗯,有趣,看起来它可以处理交换而不需要我担心的临时对象,将给它一个旋转谢谢!
【解决方案2】:

如果在一次更新中无法做到这一点,则默认答案。

读出列表,修改它,然后再写回去。它并不优雅,但它可以工作,而且也没有那么丑。

虽然它不是原子的,所以任何可以在一次更新中完成的答案都会得到复选标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多