亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

鍵包含點時是否可以設置映射?

鍵包含點時是否可以設置映射?

Go
慕神8447489 2022-05-23 17:31:36
我有問題的代碼(最小的可重現示例):import (    "fmt"    "github.com/aws/aws-sdk-go/aws"    "github.com/aws/aws-sdk-go/aws/session"    "github.com/aws/aws-sdk-go/service/dynamodb"    "github.com/aws/aws-sdk-go/service/dynamodb/expression")const (    tableName = "myTable")var (    sess = session.Must(session.NewSession())    dynamodbClient = dynamodb.New(sess))func main() {    update := expression.Set(        expression.Name("mymap.vitaly.zdanevich"),        expression.Value(true),    )    expr, _ := expression.NewBuilder().WithUpdate(update).Build()    updateItemInput := dynamodb.UpdateItemInput{        TableName: aws.String(tableName),        Key: map[string]*dynamodb.AttributeValue{            "pk": {                S: aws.String("test"),            },        },        UpdateExpression:          expr.Update(),        ExpressionAttributeNames:  expr.Names(),        ExpressionAttributeValues: expr.Values(),    }    fmt.Printf("%#v\n", updateItemInput)    dynamodbClient.UpdateItem(&updateItemInput)}結果更新項目輸入:{  ExpressionAttributeNames: {    #0: "mymap",    #1: "vitaly",    #2: "zdanevich"  },  ExpressionAttributeValues: {    :0: {      BOOL: true    }  },  Key: {    pk: {      S: "test"    },    sk: {      S: "test"    }  },  TableName: "myTable",  UpdateExpression: "SET #0.#1.#2 = :0\n"}是的,我知道 dot 用于訪問內部地圖值,但在這種情況下最好的策略是什么?我目前的解決方案:expression.Name("mymap."+strings.Replace(username, ".", "_", -1))
查看完整描述

1 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

AWS 可以選擇使用表達式屬性名稱 ( Ref ) 來處理這種情況。但是在 aws go 庫中,Expression BuilderExpressionAttributeNames通過Name按點和第三個括號拆分來創建。您可以嘗試不使用表達式生成器。


    updateItemInput := dynamodb.UpdateItemInput{

        TableName: aws.String(tableName),

        Key: map[string]*dynamodb.AttributeValue{

            "pk": {

                S: aws.String("test"),

            },

        },

        UpdateExpression:          aws.String("SET #0.#1 = :0"),

        ExpressionAttributeNames:  map[string]*string {

            "#0": aws.String("mymap"),

            "#1": aws.String("vitaly.zdanevich"),

          },

        ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{

            ":0": {

                BOOL: aws.Bool(true),

            },

        },

    }

    fmt.Printf("%#v\n", updateItemInput)


    dynamodbClient.UpdateItem(&updateItemInput)


查看完整回答
反對 回復 2022-05-23
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號