

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# PutItem
<a name="js-aws-appsync-resolver-reference-dynamodb-putitem"></a>

`PutItem` リクエストマッピングドキュメントでは、 AWS AppSync DynamoDB 関数に DynamoDB への`PutItem`リクエストを行うように指示し、以下を指定できます。
+ DynamoDB の項目のキー
+ 項目の完全なコンテンツ (`key` および `attributeValues` で構成されます)
+ 処理が成功する条件

`PutItem` リクエストの構造は次のとおりです。

```
type DynamoDBPutItemRequest = {
  operation: 'PutItem';
  key: { [key: string]: any };
  attributeValues: { [key: string]: any};
  condition?: ConditionCheckExpression;
  customPartitionKey?: string;
  populateIndexFields?: boolean;
  _version?: number;
};
```

各フィールドの定義は以下のようになります。

## PutItem フィールド
<a name="js-putitem-list"></a>

### PutItem フィールドリスト
<a name="js-putitem-list-col"></a>

 **`operation`**   
実行する DynamoDB の処理。`PutItem` DynamoDB の処理を実行するには、これを `PutItem` に設定する必要があります。この値は必須です。

 **`key`**   
DynamoDB の項目のキー。DynamoDB の項目には、単一のハッシュキー、またはハッシュキーとソートキーが含まれています。これはテーブルの構造によって変わります。「型付き値」を指定する方法の詳細については、「[型システム (リクエストマッピング)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request)」を参照してください。この値は必須です。

 **`attributeValues`**   
DynamoDB に渡す項目の残りの属性です。「型付き値」を指定する方法の詳細については、「[型システム (リクエストマッピング)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request)」を参照してください。このフィールドはオプションです。

 **`condition`**   
DynamoDB 内に既に存在するオブジェクトの状態に基づき、リクエストが成功するかどうかを判断する条件です。条件が指定されていない場合、`PutItem` リクエストはその項目の既存のエントリを上書きします。条件の詳細については、「[条件式](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-condition-expressions)」を参照してください。この値はオプションです。

 **`_version`**   
項目の既知の最新バージョンを表す数値。この値はオプションです。このフィールドは*競合の検出*に使用され、バージョン管理されたデータソースでのみサポートされます。

**`customPartitionKey`**  
有効にすると、この文字列値は、バージョニングが有効になっているときにデルタ同期テーブルで使用される `ds_sk` および `ds_pk` レコードの形式を変更します (詳細については、**「AWS AppSyncデベロッパーガイド」の「[競合検出と同期](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html)」を参照)。有効にすると、`populateIndexFields` エントリの処理も有効になります。このフィールドはオプションです。

**`populateIndexFields`**  
ブール値で、**`customPartitionKey` と一緒に有効にすると**、差分同期テーブル、具体的には `gsi_ds_pk` と `gsi_ds_sk` 列のレコードごとに新しいエントリが作成されます。詳細については、**「AWS AppSyncデベロッパーガイド」の「[競合検出と同期](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html)」を参照してください。このフィールドはオプションです。  
DynamoDB に書き込まれた項目が自動的に GraphQL プリミティブ型と JSON プリミティブ型に変換され、コンテキスト結果 (`context.result`) で参照できます。

DynamoDB に書き込まれた項目が自動的に GraphQL プリミティブ型と JSON プリミティブ型に変換され、コンテキスト結果 (`context.result`) で参照できます。

DynamoDB の型変換の詳細については、「[型システム (レスポンスマッピング)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)」を参照してください。

JavaScript リゾルバーの詳細については、「[JavaScript リゾルバーの概要](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html)」を参照してください。

## 例 1
<a name="js-example-1"></a>

次の例は、GraphQL ミューテーション `updateThing(foo: String!, bar: String!, name: String!, version: Int!)` の関数リクエストハンドラーです。

指定したキーに対応する項目がない場合は、作成されます。指定したキーに対応する項目がすでにある場合は、上書きされます。

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { foo, bar, ...values} = ctx.args
  return {
    operation: 'PutItem',
    key: util.dynamodb.toMapValues({foo, bar}),
    attributeValues: util.dynamodb.toMapValues(values),
  };
}
```

## 例 2
<a name="js-example-2"></a>

次の例は、GraphQL ミューテーション `updateThing(foo: String!, bar: String!, name: String!, expectedVersion: Int!)` の関数リクエストハンドラーです。

この例では、DynamoDB に現在ある項目の `version` フィールドに `expectedVersion` が設定されていることを確認します。

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { foo, bar, name, expectedVersion } = ctx.args;
  const values = { name, version: expectedVersion + 1 };
  let condition = util.transform.toDynamoDBConditionExpression({
    version: { eq: expectedVersion },
  });

  return {
    operation: 'PutItem',
    key: util.dynamodb.toMapValues({ foo, bar }),
    attributeValues: util.dynamodb.toMapValues(values),
    condition,
  };
}
```

DynamoDB `PutItem` API の詳細については、「[DynamoDB API のドキュメント](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)」を参照してください。