amazon-web-services - 使用 gosdk 在 Dynamodb 中执行 UpdateItem 时如何将 ValueBuilder 对象声明为 StringSet?

标签 amazon-web-services go amazon-dynamodb

注意:可能看起来像 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指定如何提及类型。

有人可以帮忙吗?
为什么我想这样做:

  1. 即使属性 socialAccounts 不存在,我也希望此功能能够正常工作。
  2. 我不想将 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/

相关文章:

node.js - 亚马逊 AWS Elastic Beanstalk NodeJS 应用程序

math - 一种具有快速能力的原型(prototype)语言

node.js - AWS Lambda Node Js - 如果存在则递增值,否则添加元素

javascript - 请求正文正在覆盖 HTTP 方法?

amazon-web-services - 如果选择了发行版,请在 map 云信息中查找

regex - 如何用正则表达式捕获 'multiple'重复组

git - 获取私有(private)包裹时无法读取用户名

mysql - 将数据从 MySQL 复制到 Amazon DynamoDB

c# - DynamoDB ExclusiveStartKey 的字典序列化不起作用

javascript - AWS Lambda 返回而不等待 promise