DynamoDB 中列表元素属性的条件表达式

问题描述 投票:0回答:1

我正在尝试为列表追加操作创建一个条件表达式,因此如果列表中已存在包含匹配的

id
属性的项目,它将不会执行追加。例如,假设我有一个如下所示的列表:

[
  {
    id: "id-one",
    size: 4,
    color: "blue" 
  },
  {
    id: "id-two",
    size: 7,
    color: "blue"
  },
  {
    id: "id-three",
    size: 2,
    color: "red"
  }
]

我的更新表情是:

SET #list_attribute_name = list_append(if_not_exists(#list_attribute_name, []), :more_items)

但我不知道如何生成一个条件表达式来检查列表中元素的 ID。

amazon-dynamodb
1个回答
0
投票

除非您知道该项目在列表中的位置,否则您不能执行此操作。您有两个选择:

  1. 首先阅读该项目(这可能会导致大规模的竞争条件)
  2. 将您的列表更改为地图
{
    "id-one": {
        "id": "id-one",
        "size": 4,
        "color": "blue"
    },
    "id-two": {
        "id": "id-two",
        "size": 7,
        "color": "blue"
    },
    "id-three": {
        "id": "id-three",
        "size": 2,
        "color": "red"
    }
}

UpdateExpression='SET #map_attribute_name.#id = :more_items'
ConditionExpression='attribute_not_exists(#map_attribute_name.#id)

© www.soinside.com 2019 - 2024. All rights reserved.