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

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

DynamoDB PutItem 上的條件表達式

DynamoDB PutItem 上的條件表達式

Go
MMTTMM 2023-04-24 16:26:17
我正在嘗試使用條件在 DynamoDB 上放置一個 intem,但不起作用。我有一個用戶表和一個屬性 id 作為主鍵,屬性名稱必須是唯一的。conditions := aws.String("NOT contains(email, :e_email)")attributes := map[string]*dynamodb.AttributeValue{    ":e_mail": &dynamodb.AttributeValue{        S: &user.Email,    },}input := &dynamodb.PutItemInput{    Item:                item,    TableName:           dynamoTable,    ConditionExpression: conditions,    ExpressionAttributeValues: attributes,}_, err = dynamo.PutItemWithContext(ctx1, input)if err != nil {    if erro, ok := err.(awserr.Error); ok {        if erro.Code() == dynamodb.ErrCodeConditionalCheckFailedException {            log.Println("User already exists")            body, _ := json.Marshal(models.ErrUsuarioJaExiste)            resp.StatusCode = models.ErrUsuarioJaExiste.CodigoHTTP            resp.Body = string(body)            return resp        }    }    log.Println(err)    resp.StatusCode = models.ErrInterno.CodigoHTTP    body, _ := json.Marshal(models.ErrInterno)    resp.Body = string(body)    return resp}但我仍然可以使用相同的電子郵件添加項目
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

這不是條件表達式的工作方式。DynamoDB 不會為匹配的電子郵件測試表中的所有項目。它正在測試此項目是否有匹配的電子郵件。如果存在這樣的項目,您的條件表達式僅應用于您在 put 調用中實際顯示其 ID 的項目。

請記住,PutItem 可用于插入新項,但也可用于替換現有項。如果不存在具有該 ID 的項目,我認為這里確實是這種情況,因為您正在編寫一個新的 ID,那么您的條件表達式將永遠不起作用。

將電子郵件作為主鍵,然后您可以使用條件表達式來測試是否存在并拒絕重復的電子郵件插入。使用帶有電子郵件屬性名稱的 attribute_not_exists 函數。

查看完整回答
反對 回復 2023-04-24
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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