As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
A UpdateItem
solicitação permite que você solicite à função do AWS AppSync DynamoDB que faça uma UpdateItem
solicitação ao DynamoDB e especifique o seguinte:
-
A chave do item no DynamoDB
-
Uma expressão de atualização que descreve como atualizar o item no DynamoDB
-
Condições para que a operação seja bem-sucedida
A solicitação UpdateItem
tem a seguinte estrutura:
type DynamoDBUpdateItemRequest = {
operation: 'UpdateItem';
key: { [key: string]: any };
update: {
expression: string;
expressionNames?: { [key: string]: string };
expressionValues?: { [key: string]: any };
};
condition?: ConditionCheckExpression;
customPartitionKey?: string;
populateIndexFields?: boolean;
_version?: number;
};
Os campos são definidos da seguinte forma:
UpdateItem campos
-
operation
-
A operação do DynamoDB para execução. Para executar a operação
UpdateItem
do DynamoDB, ela deve ser definida comoUpdateItem
. Este valor é obrigatório. -
key
-
A chave do item no DynamoDB. Os itens do DynamoDB podem ter uma única chave de hash ou uma chave de hash e uma chave de classificação, dependendo da estrutura da tabela. Para obter mais informações sobre como especificar um "valor digitado", consulte Sistema de tipo (mapeamento da solicitação). Este valor é obrigatório.
-
update
-
A seção
update
permite especificar uma expressão de atualização que descreve como atualizar o item no DynamoDB. Para obter mais informações sobre como escrever expressões de atualização, consulte a documentação do UpdateExpressions DynamoDB. Esta seção é obrigatória.A seção
update
tem três componentes:-
expression
-
A expressão de atualização. Este valor é obrigatório.
-
expressionNames
-
As substituições para espaços reservados de nome do atributo da expressão, na forma de pares chave-valor. A chave corresponde a um espaço reservado de nome usado em
expression
e o valor deve ser uma string que corresponde ao nome do atributo do item no DynamoDB. Esse campo é opcional e deve ser preenchido apenas por substituições para espaços reservados de nome do atributo da expressão usados emexpression
. -
expressionValues
-
As substituições para espaços reservados de valor do atributo da expressão, na forma de pares chave-valor. A chave corresponde a um espaço reservado de valor usado na
expression
e o valor deve ser um valor digitado. Para obter mais informações sobre como especificar um "valor digitado", consulte Sistema de tipo (Mapeamento de solicitação). Isso deve ser especificado. Esse campo é opcional e deve ser preenchido apenas por substituições para espaços reservados de valor do atributo da expressão usados emexpression
.
-
-
condition
-
Uma condição para determinar se a solicitação deve ser bem-sucedida ou não, com base no estado do objeto que já está no DynamoDB. Se nenhuma condição for especificada, a solicitação
UpdateItem
atualizará as entradas existentes independentemente do estado atual. Para obter mais informações sobre as condições, consulte Expressões de condição. Este valor é opcional. -
_version
-
Um valor numérico que representa a versão conhecida mais recente de um item. Este valor é opcional. Esse campo é usado para Detecção de conflitos e só é compatível com fontes de dados versionadas.
customPartitionKey
-
Quando ativado, esse valor de string modifica o formato dos
ds_pk
registrosds_sk
e usados pela tabela de sincronização delta quando o controle de versão é ativado (para obter mais informações, consulte Detecção e sincronização de conflitos no Guia do AWS AppSync desenvolvedor). Quando ativado, o processamento da entradapopulateIndexFields
também é ativado. Esse campo é opcional. populateIndexFields
-
Um valor booleano que, quando ativado com
customPartitionKey
, cria novas entradas para cada registro na tabela de sincronização delta, especificamente nas colunasgsi_ds_pk
egsi_ds_sk
. Para obter mais informações, consulte Detecção e sincronização de conflitos no Guia do desenvolvedor do AWS AppSync . Esse campo é opcional.
O item atualizado no DynamoDB é automaticamente convertido nos tipos primitivos GraphQL e JSON e está disponível no resultado do contexto (context.result
).
Para obter mais informações sobre a conversão de tipo do DynamoDB, consulte Sistema de tipo (mapeamento da resposta).
Para obter mais informações sobre JavaScript resolvedores, consulte a visão geral dos JavaScript resolvedores.
Exemplo 1
O exemplo a seguir é um manipulador de solicitação de função para uma mutação GraphQL upvote(id: ID!)
:
Nesse exemplo, um item no DynamoDB tem seus campos upvotes
e version
incrementados por 1.
import { util } from '@aws-appsync/utils';
export function request(ctx) {
const { id } = ctx.args;
return {
operation: 'UpdateItem',
key: util.dynamodb.toMapValues({ id }),
update: {
expression: 'ADD #votefield :plusOne, version :plusOne',
expressionNames: { '#votefield': 'upvotes' },
expressionValues: { ':plusOne': { N: 1 } },
},
};
}
Exemplo 2
O exemplo a seguir é um manipulador de solicitação de função para uma mutação GraphQL updateItem(id: ID!, title: String, author: String, expectedVersion:
Int!)
:
Esse é um exemplo complexo que inspeciona os argumentos e gera dinamicamente a expressão de atualização que inclui apenas os argumentos que foram fornecidos pelo cliente. Por exemplo, se title
e author
são omitidos, eles não são atualizados. Se um argumento for especificado, mas o seu valor for null
, esse campo é excluído do objeto no DynamoDB. Finalmente, a operação tem uma condição, que verifica se o item que está atualmente no DynamoDB tem o campo version
definido como expectedVersion
:
import { util } from '@aws-appsync/utils';
export function request(ctx) {
const { args: { input: { id, ...values } } } = ctx;
const condition = {
id: { attributeExists: true },
version: { eq: values.expectedVersion },
};
values.expectedVersion += 1;
return dynamodbUpdateRequest({ keys: { id }, values, condition });
}
/**
* Helper function to update an item
* @returns an UpdateItem request
*/
function dynamodbUpdateRequest(params) {
const { keys, values, condition: inCondObj } = params;
const sets = [];
const removes = [];
const expressionNames = {};
const expValues = {};
// Iterate through the keys of the values
for (const [key, value] of Object.entries(values)) {
expressionNames[`#${key}`] = key;
if (value) {
sets.push(`#${key} = :${key}`);
expValues[`:${key}`] = value;
} else {
removes.push(`#${key}`);
}
}
let expression = sets.length ? `SET ${sets.join(', ')}` : '';
expression += removes.length ? ` REMOVE ${removes.join(', ')}` : '';
const condition = JSON.parse(
util.transform.toDynamoDBConditionExpression(inCondObj)
);
return {
operation: 'UpdateItem',
key: util.dynamodb.toMapValues(keys),
condition,
update: {
expression,
expressionNames,
expressionValues: util.dynamodb.toMapValues(expValues),
},
};
}
Para obter mais informações sobre a API UpdateItem
do DynamoDB, consulte a Documentação da API do DynamoDB.