我的表格数据如下所示
{
"id": {
"S": "alpha-rocket"
},
"images": {
"SS": [
"apple/value:50",
"Mango/aa:284_454_51.0.0",
"Mango/bb:291",
"Mango/cc:4"
]
},
"product": {
"S": "fruit"
}
}
下面是我更新表的代码。我传递给函数的变量的值是product_id
有alpha-rocket
,image_val
有284_454_53.0.0
和image
有Mango/aa:284_454_53.0.0
。
我正在尝试将Mango/aa
的值从284_454_51.0.0
更新为284_454_53.0.0
,但收到错误消息“更新表达式中提供的文档路径对于更新无效”
def update_player_score(product_id, image_val, image):
dynamo = boto3.resource('dynamodb')
tbl = dynamo.Table('<TableName>')
result = tbl.update_item(
expression_attribute_names: {
"#image_name" => "image_name"
},
expression_attribute_values: {
":image_val" => image_val,
},
key: {
"product" => "fruit",
"id" => product_id,
},
return_values: "ALL_NEW",
table_name: "orcus",
update_expression: "SET images.#image_val = :image_val",
}
是否有一种方法可以更新Mango/aa
的值或将完整字符串"Mango/aa:284_454_51.0.0"
替换为"Mango/aa:284_454_53.0.0"
答案 0 :(得分:0)
您无法通过匹配字符串来更新列表中的字符串。如果您知道它的索引,则可以用索引替换字符串的值:
SET images[1] = : image_val
似乎您想要的不是字符串列表,而是另一个映射。因此,您可以使数据看起来像这样,而不是看起来像它,这将使您可以进行所需的更新:
{
"id": {
"S": "alpha-rocket"
},
"images": {
"M": {
"apple" : {
"M": {
"value": {
"S": "50"
}
},
"Mango" : {
"M": {
"aa": {
"S": "284_454_51.0.0"
},
"bb": {
"S": "291"
},
"cc": {
"S": "4"
}
}
}
},
"product": {
"S": "fruit"
}
}
我还将考虑将不同的值放在表中的不同“行”中,并使用查询来构建对象。