

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# $util.dynamodb 中的 DynamoDB 協助程式
<a name="dynamodb-helpers-in-util-dynamodb"></a>

**注意**  
我們現在主要支援 APPSYNC\_JS 執行期及其文件。請考慮[在此處](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)使用 APPSYNC\_JS 執行期及其指南。

`$util.dynamodb` 包含協助程式方法，可讓您更輕鬆地將資料寫入和讀取至 Amazon DynamoDB，例如自動類型映射和格式化。這些方法旨在將基本類型和清單自動映射至適當的 DynamoDB 輸入格式，這是 格式`Map`的 `{ "TYPE" : VALUE }`。

例如，先前在 DynamoDB 中建立新項目的請求映射範本可能如下所示：

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : { "S" : "$util.autoId()" }
    },
    "attributeValues" : {
         "title" : { "S" : $util.toJson($ctx.args.title) },
         "author" : { "S" : $util.toJson($ctx.args.author) },
         "version" : { "N", $util.toJson($ctx.args.version) }
    }
}
```

如果我們想要將欄位新增到物件，必須在結構描述中更新 GraphQL 查詢和要求映射範本。不過，我們現在可以重組請求映射範本，讓它自動挑選在我們的結構描述中新增的新欄位，並將它們新增至具有正確類型的 DynamoDB：

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },
    "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}
```

在先前的範例中，我們使用`$util.dynamodb.toDynamoDBJson(...)`協助程式自動取得產生的 ID，並將其轉換為字串屬性的 DynamoDB 表示法。然後，我們採用所有引數並將其轉換為其 DynamoDB 表示法，並將其輸出至範本中的 `attributeValues` 欄位。

每個協助程式有兩個版本：傳回物件的版本 (例如，`$util.dynamodb.toString(...)`)，以及傳回物件做為 JSON 字串的版本 (例如，`$util.dynamodb.toStringJson(...)`)。在前述範例中，我們使用傳回資料做為 JSON 字串的版本。如果您想要在範本使用物件之前，對物件進行操作，可以選擇傳回物件，如下所示：

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },

    #set( $myFoo = $util.dynamodb.toMapValues($ctx.args) )
    #set( $myFoo.version = $util.dynamodb.toNumber(1) )
    #set( $myFoo.timestamp = $util.dynamodb.toString($util.time.nowISO8601()))

    "attributeValues" : $util.toJson($myFoo)
}
```

在前述範例中，我們傳回轉換引數做為映射而非 JSON 字串，然後在使用 `version` 將其輸出到範本的 `timestamp` 欄位之前，新增 `attributeValues` 和 `$util.toJson(...)` 欄位。

每個 JSON 版本的協助程式等同於以 `$util.toJson(...)` 包裝非 JSON 版本。例如，下列陳述式完全相同：

```
$util.toStringJson("Hello, World!")
$util.toJson($util.toString("Hello, World!"))
```

## toDynamoDB
<a name="utility-helpers-in-toDynamoDB"></a>

### toDynamoDB 公用程式清單
<a name="utility-helpers-in-toDynamoDB-list"></a>

** `$util.dynamodb.toDynamoDB(Object) : Map` **  
DynamoDB 的一般物件轉換工具，可將輸入物件轉換為適當的 DynamoDB 表示法。它在代表一些類型的方式上是固定的：例如，它會使用清單 (「L」) 而不是集合 (「SS」、「NS」、「BS」)。這會傳回描述 DynamoDB 屬性值的物件。  
**字串範例**  

```
Input:      $util.dynamodb.toDynamoDB("foo")
Output:     { "S" : "foo" }
```
**數字範例**  

```
Input:      $util.dynamodb.toDynamoDB(12345)
Output:     { "N" : 12345 }
```
**布林值範例**  

```
Input:      $util.dynamodb.toDynamoDB(true)
Output:     { "BOOL" : true }
```
**清單範例**  

```
Input:      $util.dynamodb.toDynamoDB([ "foo", 123, { "bar" : "baz" } ])
Output:     {
               "L" : [
                   { "S" : "foo" },
                   { "N" : 123 },
                   {
                       "M" : {
                           "bar" : { "S" : "baz" }
                       }
                   }
               ]
           }
```
**地圖範例**  

```
Input:      $util.dynamodb.toDynamoDB({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "M" : {
                   "foo"  : { "S" : "bar" },
                   "baz"  : { "N" : 1234 },
                   "beep" : {
                       "L" : [
                           { "S" : "boop" }
                       ]
                   }
               }
           }
```

****`$util.dynamodb.toDynamoDBJson(Object) : String`** **  
與 相同`$util.dynamodb.toDynamoDB(Object) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## toString utils
<a name="utility-helpers-in-toString"></a>

### toString utils 清單
<a name="utility-helpers-in-toString-list"></a>

****`$util.dynamodb.toString(String) : String`** **  
將輸入字串轉換為 DynamoDB 字串格式。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toString("foo")
Output:     { "S" : "foo" }
```

** `$util.dynamodb.toStringJson(String) : Map` **  
與 相同`$util.dynamodb.toString(String) : String`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

** `$util.dynamodb.toStringSet(List<String>) : Map` **  
將具有字串的清單轉換為 DynamoDB 字串集格式。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toStringSet([ "foo", "bar", "baz" ])
Output:     { "SS" : [ "foo", "bar", "baz" ] }
```

** `$util.dynamodb.toStringSetJson(List<String>) : String` **  
與 相同`$util.dynamodb.toStringSet(List<String>) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## toNumber utils
<a name="utility-helpers-in-toNumber"></a>

### toNumber utils 清單
<a name="utility-helpers-in-toNumber-list"></a>

** `$util.dynamodb.toNumber(Number) : Map` **  
將數字轉換為 DynamoDB 數字格式。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toNumber(12345)
Output:     { "N" : 12345 }
```

** `$util.dynamodb.toNumberJson(Number) : String` **  
與 相同`$util.dynamodb.toNumber(Number) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

** `$util.dynamodb.toNumberSet(List<Number>) : Map` **  
將數字清單轉換為 DynamoDB 數字集格式。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toNumberSet([ 1, 23, 4.56 ])
Output:     { "NS" : [ 1, 23, 4.56 ] }
```

** `$util.dynamodb.toNumberSetJson(List<Number>) : String` **  
與 相同`$util.dynamodb.toNumberSet(List<Number>) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## toBinary utils
<a name="utility-helpers-in-toBinary"></a>

### toBinary utils 清單
<a name="utility-helpers-in-toBinary-list"></a>

** `$util.dynamodb.toBinary(String) : Map` **  
將編碼為 base64 字串的二進位資料轉換為 DynamoDB 二進位格式。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toBinary("foo")
Output:     { "B" : "foo" }
```

** `$util.dynamodb.toBinaryJson(String) : String` **  
與 相同`$util.dynamodb.toBinary(String) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

** `$util.dynamodb.toBinarySet(List<String>) : Map` **  
將編碼為 base64 字串的二進位資料清單轉換為 DynamoDB 二進位集格式。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toBinarySet([ "foo", "bar", "baz" ])
Output:     { "BS" : [ "foo", "bar", "baz" ] }
```

** `$util.dynamodb.toBinarySetJson(List<String>) : String` **  
與 相同`$util.dynamodb.toBinarySet(List<String>) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## toBoolean utils
<a name="utility-helpers-in-toBoolean"></a>

### toBoolean utils 清單
<a name="utility-helpers-in-toBoolean-list"></a>

** `$util.dynamodb.toBoolean(Boolean) : Map` **  
將布林值轉換為適當的 DynamoDB 布林值格式。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toBoolean(true)
Output:     { "BOOL" : true }
```

** `$util.dynamodb.toBooleanJson(Boolean) : String` **  
與 相同`$util.dynamodb.toBoolean(Boolean) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## toNull utils
<a name="utility-helpers-in-toNull"></a>

### toNull utils 清單
<a name="utility-helpers-in-toNull-list"></a>

** `$util.dynamodb.toNull() : Map` **  
以 DynamoDB null 格式傳回 null。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toNull()
Output:     { "NULL" : null }
```

** `$util.dynamodb.toNullJson() : String` **  
與 相同`$util.dynamodb.toNull() : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## toList utils
<a name="utility-helpers-in-toList"></a>

### toList 公用程式清單
<a name="utility-helpers-in-toList-list"></a>

****`$util.dynamodb.toList(List) : Map`** **  
將物件清單轉換為 DynamoDB 清單格式。清單中的每個項目也會轉換為適當的 DynamoDB 格式。它在代表一些巢狀物件的方式上是固定的：例如，它會使用清單 (「L」) 而不是集合 (「SS」、「NS」、「BS」)。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toList([ "foo", 123, { "bar" : "baz" } ])
Output:     {
               "L" : [
                   { "S" : "foo" },
                   { "N" : 123 },
                   {
                       "M" : {
                           "bar" : { "S" : "baz" }
                       }
                   }
               ]
           }
```

** `$util.dynamodb.toListJson(List) : String` **  
與 相同`$util.dynamodb.toList(List) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## toMap 公用程式
<a name="utility-helpers-in-toMap"></a>

### toMap utils 清單
<a name="utility-helpers-in-toMap-list"></a>

** `$util.dynamodb.toMap(Map) : Map` **  
將映射轉換為 DynamoDB 映射格式。映射中的每個值也會轉換為其適當的 DynamoDB 格式。它在代表一些巢狀物件的方式上是固定的：例如，它會使用清單 (「L」) 而不是集合 (「SS」、「NS」、「BS」)。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toMap({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "M" : {
                   "foo"  : { "S" : "bar" },
                   "baz"  : { "N" : 1234 },
                   "beep" : {
                       "L" : [
                           { "S" : "boop" }
                       ]
                   }
               }
           }
```

** `$util.dynamodb.toMapJson(Map) : String` **  
與 相同`$util.dynamodb.toMap(Map) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

** `$util.dynamodb.toMapValues(Map) : Map` **  
建立映射的副本，其中每個值都已轉換為其適當的 DynamoDB 格式。它在代表一些巢狀物件的方式上是固定的：例如，它會使用清單 (「L」) 而不是集合 (「SS」、「NS」、「BS」)。  

```
Input:      $util.dynamodb.toMapValues({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "foo"  : { "S" : "bar" },
               "baz"  : { "N" : 1234 },
               "beep" : {
                   "L" : [
                       { "S" : "boop" }
                   ]
               }
           }
```
這與 略有不同，`$util.dynamodb.toMap(Map) : Map`因為它只會傳回 DynamoDB 屬性值的內容，但不會傳回整個屬性值本身。例如，下列陳述式完全相同：  

```
$util.dynamodb.toMapValues($map)
$util.dynamodb.toMap($map).get("M")
```

** `$util.dynamodb.toMapValuesJson(Map) : String` **  
與 相同`$util.dynamodb.toMapValues(Map) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

## S3Object 公用程式
<a name="utility-helpers-in-S3Object"></a>

### S3Object 公用程式清單
<a name="utility-helpers-in-S3Object-list"></a>

** `$util.dynamodb.toS3Object(String key, String bucket, String region) : Map` **  
將金鑰、儲存貯體和區域轉換為 DynamoDB S3 物件表示法。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toS3Object("foo", "bar", region = "baz")
Output:     { "S" : "{ \"s3\" : { \"key\" : \"foo", \"bucket\" : \"bar", \"region\" : \"baz" } }" }
```

** `$util.dynamodb.toS3ObjectJson(String key, String bucket, String region) : String` **  
與 相同`$util.dynamodb.toS3Object(String key, String bucket, String region) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

** `$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map` **  
將金鑰、儲存貯體、區域和選用版本轉換為 DynamoDB S3 物件表示法。這會傳回描述 DynamoDB 屬性值的物件。  

```
Input:      $util.dynamodb.toS3Object("foo", "bar", "baz", "beep")
Output:     { "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" }
```

** `$util.dynamodb.toS3ObjectJson(String key, String bucket, String region, String version) : String` **  
與 相同`$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map`，但 會以 JSON 編碼字串的形式傳回 DynamoDB 屬性值。

** `$util.dynamodb.fromS3ObjectJson(String) : Map` **  
接受 DynamoDB S3 物件的字串值，並傳回包含金鑰、儲存貯體、區域和選用版本的映射。  

```
Input:      $util.dynamodb.fromS3ObjectJson({ "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" })
Output:     { "key" : "foo", "bucket" : "bar", "region" : "baz", "version" : "beep" }
```