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

如何在DynamoDB中新增或更新嵌套对象,适配属性存在/缺失两种场景

你不需要担心custom属性是否存在的问题:DynamoDB的update_item接口中,UpdateExpression的SET指令天生就支持「属性不存在则新增、存在则覆盖」的语义。你现有的代码本身就可以适配custom存在/不存在的两种场景,前提是domainBypassList和applicationBypassList这两个父级Map属性一定存在(你给出的两个存储示例都满足该前提)。

如果要兼容更极端的场景(比如部分旧条目可能缺失domainBypassList或applicationBypassList父级属性导致路径报错),可以通过if_not_exists函数给父级属性设置默认空Map兜底,修改后的代码如下:

res = self.service_context.policies.update_item(
            Key={
                'tenantId': self.event["user"]['tenantId'],
                'policyName': self.policy_name
            },
            UpdateExpression="""
                set domainBypassList = if_not_exists(domainBypassList, :empty_map),
                    domainBypassList.custom=:dbl,
                    applicationBypassList = if_not_exists(applicationBypassList, :empty_map),
                    applicationBypassList.custom=:abl,
                    updatedAt=:uat
            """,
            ExpressionAttributeValues={
                ':abl': self.payload["applicationBypassList"],
                ':dbl': self.payload["domainBypassList"],
                ':uat': datetime.datetime.now().strftime("%Y/%m/%d, %I:%M %p"),
                ':empty_map': {}
            },
            ReturnValues="UPDATED_NEW"
        )

补充说明

  • 代码中新增的if_not_exists判断只有当对应父级属性不存在时才会写入空Map,不会覆盖已有的父级属性内容
  • 如果你可以确认所有存储条目都必然存在domainBypassList和applicationBypassList,完全可以继续使用你原来的代码,不需要做任何修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:15:05