在单个DynamoDB更新操作中追加和截断列表?

时间:2016-09-09 21:28:56

标签: amazon-dynamodb

我想在DynamoDB项目中拥有基本上是上限列表的内容。我希望能够将一个项目添加到列表的前面,然后如果超过一定大小则将项目从后面放下。

在我的例子中,我将帽子设置为3,前面加上元素“6”,并在状态之前/之后显示:

                    { } -> { "myList": [6] }
      { "myList": [1] } -> { "myList": [6, 1] }
{ "myList": [3, 2, 1] } -> { "myList": [6, 3, 2] }

但我无法使用以下更新表达式在SET上合并REMOVEmyList操作:

# (":empty" set to an empty list in the value map)
SET myList = list_append(:v, if_not_exists(myList, :empty)) REMOVE myList[3]

尝试使用此表达式会导致异常(使用Java中的Document API):

Invalid UpdateExpression: Two document paths overlap with each other; must remove or rewrite one of these paths

如果我将SETREMOVE分成两个不同的更新请求,它就会起作用。是否有任何技巧可以让我在一个请求中执行此操作?

1 个答案:

答案 0 :(得分:5)

目前在DynamoDB中,您不能在多个操作中拥有相同的文档路径,即使它们是单独的操作。这是因为DynamoDB无法保证在同一更新表达式中执行操作的顺序。