我想在DynamoDB项目中拥有基本上是上限列表的内容。我希望能够将一个项目添加到列表的前面,然后如果超过一定大小则将项目从后面放下。
在我的例子中,我将帽子设置为3,前面加上元素“6”,并在状态之前/之后显示:
{ } -> { "myList": [6] }
{ "myList": [1] } -> { "myList": [6, 1] }
{ "myList": [3, 2, 1] } -> { "myList": [6, 3, 2] }
但我无法使用以下更新表达式在SET
上合并REMOVE
和myList
操作:
# (":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
如果我将SET
和REMOVE
分成两个不同的更新请求,它就会起作用。是否有任何技巧可以让我在一个请求中执行此操作?
答案 0 :(得分:5)
目前在DynamoDB中,您不能在多个操作中拥有相同的文档路径,即使它们是单独的操作。这是因为DynamoDB无法保证在同一更新表达式中执行操作的顺序。