如何在DynamoDB更新表达式中分隔多个子句

时间:2017-08-07 18:25:28

标签: ruby amazon-web-services amazon-dynamodb

根据AWS Docs

  

更新表达式由一个或多个子句组成。每个条款   以SET,REMOVE,ADD或DELETE关键字开头。你可以包括任何   更新表达式中的这些子句的任何顺序。但是,每一个   action关键字只能出现一次。

我无法在一个SET中获得REMOVEupdate_expression的语法权限:

params = {
           key: {
             'id' => { s: '123'  }
           },
           table_name: 'customers'
           expression_attribute_names: {
             '#ADR' => 'address'
             '#ON' => 'order_num'
           },
           expression_attribute_values: {
             ':a' => { s: '123 Main St' }
           },
           update_expression: 'REMOVE #ON, SET #ADR = :a',
         }
  dynamodb = Aws::DynamoDB::Client.new(region: 'us-east-1',       
                                       simple_attributes: false)
  dynamodb.update_item(params)

我也尝试了以下内容:

update_expression: 'SET #ADR = :a, REMOVE #ON' => Invalid UpdateExpression: Syntax error; token: "REMOVE", near: ", REMOVE #ON" (Aws::DynamoDB::Errors::ValidationException)

update_expression: ['SET #ADR = :a', 'REMOVE #ON'] => expected params[:update_expression] to be a String, got value ['SET #ADR = :a', 'REMOVE #ON'] (class: Array) instead. (ArgumentError)

有人能指出我正确的文档吗?

1 个答案:

答案 0 :(得分:10)

我太复杂了 这就是答案:

update_expression: 'SET #ADR = :a REMOVE #ON'

除了Clause关键字之外,不需要分隔符。