2016-09-15 4 views
0

DynamoDBインスタンスにデータを格納するAWS APIゲートウェイがあります。入れ子になったデータでUpdateExpressionを設定するには

{ 
    "TableName": "stuff", 
    "Item": { 
    "stuffId": { 
     "S": "02b4e004-1132-4b87-a855-20e7d1bd1840" 
    }, 
    "clients": { 
     "M": { 
     "company_inc": { 
      "M": { 
      "prod": { 
       "S": "null" 
      }, 
      "qa": { 
       "S": "null" 
      }, 
      "stage": { 
       "S": "null" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

私はHTTPのPATCHリクエスト与えられた私はcompany_inc.prodを更新することができるように私の体のマッピングテンプレートを設定する方法を把握しようとしている:私のテーブルの構造は次のようになります。例えば;このクエリ文字列与えられた:

?stuffId=02b4e004-1132-4b87-a855-20e7d1bd1840&client=company_inc&location=prod&locationIsSet=true 

私はこのようにしてレコードを更新します:

{ 
    "TableName": "stuff", 
    "Item": { 
    "stuffId": { 
     "S": "02b4e004-1132-4b87-a855-20e7d1bd1840" 
    }, 
    "clients": { 
     "M": { 
     "company_inc": { 
      "M": { 
      "prod": { 
       "S": "true" 
      }, 
      "qa": { 
       "S": "null" 
      }, 
      "stage": { 
       "S": "null" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

は「UpdateExpressionは」それを達成したいと何を見てする必要がありますか?

答えて

0

私は答えを見つけたと思います。 company_inc.prodのパスには、#client#locationのような属性名をプレースホルダとして使用する必要があります。

{ 
    "TableName": "stuff", 
    "Key": { 
     "alterId": { 
      "S": "$input.params('stuffId')" 
     } 
    }, 
    "UpdateExpression": "set clients.#attrClientName.#attrLocation = :locationIsSet", 
    "ExpressionAttributeNames" : { 
     "#attrClientName" : "$input.params('client')", 
     "#attrLocation" : "$input.params('location')" 
    }, 
    "ExpressionAttributeValues": { 
     ":locationIsSet": {"S": "$input.params('location')"} 
    } 
} 
関連する問題