注意:可能看起来像 this 的重复项但这是不同的,因为我需要通过 golang 来完成此操作,而这是在 JS 中。
我想在 goSDK 中对 dynamodb 项目执行以下操作:
UpdateExpression: 'ADD socialAccounts :socialAccountId',
ExpressionAttributeValues: {
':socialAccountId': {
'SS': [socialAccountId]
}
},
在 GoSDK 中的典型实现方式是:
expression.Add(expression.Name("socialAccounts"), expression.Value([]string{"socialAccountId"}))
但是,SDK 并未将字符串数组视为 SS
(StringSet) 类型,而是将其视为 L
(List) 类型。
记录的错误:
Error: ValidationException: Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: LIST, typeSet: ALLOWED_FOR_ADD_OPERAND
我找不到任何功能 in the docs指定如何提及类型。
有人可以帮忙吗?
为什么我想这样做:
- 即使属性
socialAccounts
不存在,我也希望此功能能够正常工作。 - 我不想将
SET
操作与list_append
一起使用,因为这可能会引入重复元素。
最佳答案
如果需要指定类型,请使用dynamodb.AttributeValue
:
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/aws/aws-sdk-go/service/dynamodb/expression"
)
func main() {
val := (&dynamodb.AttributeValue{}).SetSS(aws.StringSlice([]string{"socialAccountId"}))
expression.Add(expression.Name("socialAccounts"), expression.Value(val))
fmt.Printf("%s\n", val)
}
输出:
{
SS: ["socialAccountId"]
}
关于amazon-web-services - 使用 gosdk 在 Dynamodb 中执行 UpdateItem 时如何将 ValueBuilder 对象声明为 StringSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76551263/