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

cam*_*eck 6 ruby amazon-web-services amazon-dynamodb

根据AWS文档:

更新表达式由一个或多个子句组成.每个子句都以SET,REMOVE,ADD或DELETE关键字开头.您可以按任何顺序在更新表达式中包含这些子句中的任何子句.但是,每个操作关键字只能出现一次.

我遇到了麻烦的语法正确的SET,并REMOVE在一个update_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)
Run Code Online (Sandbox Code Playgroud)

我也尝试过以下方法:

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)
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的文档?

cam*_*eck 13

我让它变得太复杂了.
这就是答案:

update_expression: 'SET #ADR = :a REMOVE #ON'
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,如果要重复相同的操作,请使用逗号分隔符。在这种情况下,操作员名称不会重复。 (2认同)