簡體   English   中英

如何使用 dynamodbiface.expression 為 `dynamodb.UpdateItemInput ` 設置 `ConditionExpression`

[英]How to set `ConditionExpression` for `dynamodb.UpdateItemInput ` using dynamodbiface.expression

expr := expression.Name("field1").Equal(expression.Value("val1"))
condition, err := expression.NewBuilder().WithCondition(expr).Build()
if err != nil { return err }
updateExpr := expression.Set(expression.Name("field2"), expression.Value("field2"))
update, err := expression.NewBuilder().WithUpdate(updateExpr).Build()
updateItemInput := &dynamodb.UpdateItemInput {
            TableName           :       aws.String("foobar"),
            Key:                        partitionKey,
            ConditionExpression:        condition.Condition(),

            UpdateExpression:           update.Update(),
            ExpressionAttributeNames:   update.Names(),
            ExpressionAttributeValues:  update.Values(),
            ReturnValues:               aws.String("UPDATED_NEW"),
        }

以上是updateItemInput現在的樣子。 我試圖通過這個實現的是:

if field1 == "value1" then 
   set field2 = "value2"

不用說,這失敗了,因為ExpressionAttributeNamesExpressionAttributeValues沒有condition的上下文。

我在網上和 StackOverflow 上看到的是,人們大多自己編寫ConditionExpression字符串,我希望盡可能避免這種情況。

那么有什么方法可以使用dynamodbiface.expression來避免手動編寫ConditionExpression

您只需要一個表達式,然后根據要填充的輸入值使用適當的方法:

ex, e := expression.NewBuilder().
    WithCondition(expression.Name("field1").Equal(expression.Value("val1"))).
    WithUpdate(expression.
        Set(
            expression.Name("field2"),
            expression.Value("value2")).
    Build()
if e != nil {
    return e
}
updateItemInput := &dynamodb.UpdateItemInput{
    TableName:                 aws.String("foobar"),
    Key:                       partitionKey,
    ConditionExpression:       ex.Condition(),
    ExpressionAttributeNames:  ex.Names(),
    ExpressionAttributeValues: ex.Values(),
    UpdateExpression:          ex.Update(),
    ReturnValues:              aws.String("UPDATED_NEW"),
}

這是我在生產中工作的一些東西的稍微修改版本。 我無法確認ReturnValues有效,因為我不使用它,但其余部分幾乎是從工作代碼中復制/粘貼的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM