我第一次直接使用 Dynamo,在本地的玩具項(xiàng)目中。我正在嘗試創(chuàng)建由條件表達(dá)式保護(hù)的記錄 - 如果用戶名(范圍鍵)或uniqueId(哈希鍵)已經(jīng)存在,則失?。?。但是,當(dāng)我放置具有相同用戶名的記錄時(shí),我不會(huì)遇到?jīng)_突 - 并且對表的掃描證實(shí)了這一點(diǎn)。我正在使用localstack(本地AWS模擬),如果這有所作為的話。"attribute_not_exists(UserId) and attribute_not_exists(Username)"問題:我應(yīng)該使用事務(wù)還是其他抽象?我是否在表設(shè)置中構(gòu)造了錯(cuò)誤的鍵(請參閱 q 的底部)?是否需要在條件中指定密鑰的類型?以下是創(chuàng)建記錄的邏輯:userID := GenerateUniqueID()record := UserCredentialsRecord{ UserID: userID, Username: username, Password: base64.StdEncoding.EncodeToString(hashedPassword), Salt: base64.StdEncoding.EncodeToString(salt), Email: email, AccountCreatedTS: time.Now().Unix(),}...input := &dynamodb.PutItemInput{ Item: av, TableName: aws.String(userCredentialsTableName), ConditionExpression: aws.String("attribute_not_exists(UserId) and attribute_not_exists(Username)"),}..._, err = session.PutItem(input)if err != nil { fmt.Println("Got error calling PutItem:", err.Error())}
2 回答

開滿天機(jī)
TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
您對條件表達(dá)式的作用有誤解。attribute_not_exists
這并不意味著該屬性不存在于表中的任何項(xiàng)目上,而是該屬性不存在于您正在使用的項(xiàng)目上。
因此,操作按設(shè)計(jì)工作。
如果要確保沒有兩個(gè)項(xiàng)目被添加到具有相同用戶名或用戶 ID 的表中,則必須使用這兩個(gè)屬性作為表的主鍵,或者提出一種替代方法來檢查重復(fù)項(xiàng)。

HUH函數(shù)
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
在 DynamoDB 中,+ 構(gòu)成主鍵?;蛘?,僅當(dāng)我們沒有為表定義時(shí)。hash key
range key
hash key
range key
因此,您想要的不能在范圍鍵上完成,因?yàn)檫@不是唯一的。
這里不這樣做的要點(diǎn)是 - 不為您掃描表,而是檢查您正在使用的記錄/項(xiàng)目(來自ddb查詢中的哈希鍵和范圍鍵)。attribute_not_exists
- 2 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報(bào)
0/150
提交
取消