You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新DynamoDB中列表内字典的表项值?

解决DynamoDB嵌套数组元素更新问题

问题原因

你的代码尝试直接更新顶层的InstanceType字段,但目标值实际嵌套在instanceParameters数组的键值对对象中,UpdateExpression的路径错误,导致无法匹配到要修改的字段,因此数据无变化。

解决方案

使用DynamoDB的数组元素匹配语法,定位到instanceParameters数组中key为InstanceType的对象,更新其value属性:

修改后的代码

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Instances')

def update_database(pk, sk):
    try:
        res = table.update_item(
            Key={
                'PK': pk,
                'SK': sk
            },
            ConditionExpression='attribute_exists(instanceParameters)',
            UpdateExpression='SET instanceParameters[?(@.key = :target_key)].value = :new_val',
            ExpressionAttributeValues={
                ':target_key': 'InstanceType',
                ':new_val': 't2.4xlarge'
            },
            ReturnValues='UPDATED_NEW'
        )
        print("更新成功:", res)
    except Exception as e:
        print("更新失败:", e)

代码说明

  • instanceParameters[?(@.key = :target_key)]:通过谓词匹配数组中所有key等于InstanceType的对象
  • 匹配到目标对象后,直接更新其value字段为指定的新值
  • 保留ConditionExpression确保instanceParameters属性存在,避免误操作不存在的项

如果数组中存在多个key为InstanceType的对象,该操作会更新所有匹配项;若需限定只更新单个,可在ConditionExpression中添加额外校验条件(比如验证数组中仅存在一个目标key)。

内容的提问来源于stack exchange,提问作者MB41

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:05:17