为何DynamoDB的TransactWriteItems无法更新嵌套对象?
问题原因及解决方案
这个报错和TransactWriteItems本身无关,是你传入的参数存在明显的不匹配问题:
表达式属性名不匹配
UpdateExpression里用到了#manualCost和#useAutoCost两个占位符,但你的ExpressionAttributeNames里只定义了#insp、#manualImpact、#useAutoImpact,完全没有这两个占位符的映射关系,DynamoDB自然找不到对应的属性名。表达式属性值不匹配
UpdateExpression里赋值用的是:manualCost和:useAutoCost,但ExpressionAttributeValues里提供的却是:manualImpact和:useAutoImpact,同样存在名称不对应问题。
你说单独用Update操作能正常执行,应该是单独执行时的参数是正确的,而批量生成TransactWriteItems参数时出现了拼写/映射错误。TransactWriteItems中的Update语法和独立的Update操作完全一致,支持嵌套对象更新,只要参数正确就能正常执行。
修正后的参数示例(根据你的意图调整):
{"TransactItems": [ { "Update": { "TableName": "XXXXtest", "Key": { "windFarmTurbineKey": "XXXXX1", "key": "testxxx" }, "UpdateExpression": "SET observations.#insp.#manualCost = :manualCost, observations.#insp.#useAutoCost = :useAutoCost", "ExpressionAttributeNames": { "#insp": "2022-08-18-2", "#manualCost": "manualCost", "#useAutoCost": "useAutoCost" }, "ExpressionAttributeValues": { ":manualCost": 800, ":useAutoCost": false } } } ]}
核心要求是保证UpdateExpression里的所有占位符,在ExpressionAttributeNames和ExpressionAttributeValues中都有对应的正确映射。
内容的提问来源于stack exchange,提问作者Meli
相关产品推荐
相关产品推荐

