编辑问题:尝试更新map[]接口字段时出现错误400。
当使用UpdateItem时,我在DynamoDB中更新数组对象时遇到了麻烦,特别是在数组对象上(在本例中是Authors字段)。
&awserr.requestError{awsError:(*awserr.baseError)(0xc000204140), statusCode:400, requestID:"QU2MMAJVDRM0JHJEPOE93VJPSVVV4KQNSO5AEMVJF66Q9ASUAAJG", bytes:[]uint8(nil)}
我没有遇到任何问题时,使用PutItem与相同的结构。我不知道我错过了什么和错误AWS是给了我不是很清楚。
结构:
type Book struct {
Id int `json:":id"`
Title string `json:":title"`
Photo Photo `json:":photo"`
Authors []Author `json:":authors"`
}
type Author struct {
Id int `json:":id"`
Name string `json:":name"`
}
我已尝试更新代码:
input := &dynamodb.UpdateItemInput{
TableName: aws.String("books"),
Key: key,
UpdateExpression: aws.String(updateExp),
ExpressionAttributeValues: value,
}
更新表达式:
"SET title = :title, photo = :photo, authors = list_append(authors, :authors)"
我也已经试过了
authors = :authors
因为我计划每次都替换整个 Authors 值,但我似乎可以得到这个工作。
当我记录ExpressionAttributeValue时,它看起来像这样
ExpressionAttributeValues: {
:authors: {
L: [{
M: {
id: {
N: "1"
},
name: {
S: "Bob"
}
}
},{
M: {
name: {
S: "Arthur"
},
id: {
N: "2"
}
}
}]
},
:title: {
S: "Jumanji"
},
:description: {
S: "Jungle Book"
},
:photo: {
M: {
original: {
S: "sample.jpg"
}
}
}
}
我已经测试了删除authors字段更新(以UpdateExpression根据可用数据进行调整的方式进行编码),所有其他字段更新工作正常,因此我的问题实际上只是更新[]struct类型。
1条答案
按热度按时间bxfogqkk1#
我知道这个问题是关于如何使用updateItem更新整个数组的。我也遇到过类似的问题(这就是我如何找到你的问题的原因),但我设法自己解决了它,因为没有太多关于使用DynamoDB更新数组的信息。我在完成时一直打开这个浏览器的选项卡,现在我可以提供一些有用的帮助:
所以,你想更新你的authors数组(沿着其他的,比如标题,描述和照片)。
我会首先运行一个for循环来正确Map更新的数据,因为数组中可能不止两个元素。
然后我们准备更新:
我希望这对你来说足够好了。对我来说很有效。