PutItem - AWS AppSync

PutItem

通过使用 PutItem 请求映射文档,您可以指示 AWS AppSync DynamoDB 函数向 DynamoDB 发出 PutItem 请求,并允许您指定以下内容:

  • DynamoDB 中的项目的键

  • 项目的完整内容(包括 keyattributeValues

  • 操作成功执行的条件

PutItem 请求具有以下结构:

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

字段定义如下:

PutItem 字段

operation

要执行的 DynamoDB 操作。要执行 PutItem DynamoDB 操作,该字段必须设置为 PutItem。该值为必填项。

key

DynamoDB 中的项目的键。DynamoDB 项目可能具有单个哈希键,也可能具有哈希键和排序键,具体取决于表结构。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该值为必填项。

attributeValues

要放入 DynamoDB 中的项目的其余属性。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该字段是可选的。

condition

根据 DynamoDB 中已有的对象状态,确定请求是否应成功的条件。如果未指定条件,则 PutItem 请求将覆盖该项目的任何现有条目。有关条件的更多信息,请参阅条件表达式。该值为可选项。

_version

表示项目的最新已知版本的数值。该值为可选项。该字段用于冲突检测,仅受版本控制的数据来源支持。

customPartitionKey

如果启用,该字符串值修改启用了版本控制时增量同步表使用的 ds_skds_pk 记录的格式(有关更多信息,请参阅《AWS AppSync 开发人员指南》中的冲突检测和同步)。如果启用,还会启用 populateIndexFields 条目处理。该字段是可选的。

populateIndexFields

一个布尔值,在customPartitionKey 一起启用时,它为增量同步表中的每个记录创建新条目,具体来说是在 gsi_ds_pkgsi_ds_sk 列中创建新条目。有关更多信息,请参阅《AWS AppSync 开发人员指南》中的冲突检测和同步该字段是可选的。

写入到 DynamoDB 的项目自动转换为 GraphQL 和 JSON 基元类型,并在上下文结果 (context.result) 中提供。

写入到 DynamoDB 的项目自动转换为 GraphQL 和 JSON 基元类型,并在上下文结果 (context.result) 中提供。

有关 DynamoDB 类型转换的更多信息,请参阅类型系统(响应映射)

有关 JavaScript 解析器的更多信息,请参阅 JavaScript 解析器概述

示例 1

以下示例是 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

以下示例是 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 文档