Tôi muốn có một danh sách giới hạn trong một mục DynamoDB. Tôi muốn có thể thêm một khoản mục vào mặt trước của danh sách, và sau đó thả mục ra phía sau nếu nó vượt quá một kích thước nhất định.Nối và cắt bớt danh sách trong thao tác cập nhật DynamoDB đơn lẻ?
Trong ví dụ của tôi, tôi sẽ đặt nắp đến 3, hãy thêm yếu tố "6", và hiển thị trước/sau trạng thái:
{ } -> { "myList": [6] }
{ "myList": [1] } -> { "myList": [6, 1] }
{ "myList": [3, 2, 1] } -> { "myList": [6, 3, 2] }
Nhưng tôi không thể sử dụng biểu thức cập nhật sau đây để kết hợp một SET
và REMOVE
hoạt động trên myList
:
# (":empty" set to an empty list in the value map)
SET myList = list_append(:v, if_not_exists(myList, :empty)) REMOVE myList[3]
Cố gắng sử dụng này kết quả biểu hiện trong một ngoại lệ (bằng cách sử dụng API Tài liệu trong Java):
Invalid UpdateExpression: Two document paths overlap with each other; must remove or rewrite one of these paths
Nó sẽ hoạt động nếu tôi chia SET
và REMOVE
thành hai yêu cầu cập nhật khác nhau. Có bất kỳ thủ thuật nào có thể cho phép tôi làm điều đó trong một yêu cầu không?
Vâng, tôi không ngạc nhiên khi không thể thực hiện trực tiếp trong một thao tác đơn lẻ. Tôi đã hy vọng có thể có một số lừa hoặc làm việc xung quanh đó sẽ thực hiện nó. (Thực hiện hai yêu cầu riêng biệt sẽ mở ra cánh cửa cho các điều kiện chủng tộc cũng như nếu bạn đang thực hiện cập nhật đồng thời, mặc dù may mắn đó không phải là vấn đề trong trường hợp sử dụng của tôi ...) – ryryguy
Vâng. Trong hầu hết các trường hợp, bạn có thể ngăn các điều kiện chủng tộc với các biểu thức có điều kiện, thử lại và sử dụng phép cộng và trừ nguyên tử nếu bạn đang xử lý các số. –