如何使用 DynamoDB 文档客户端将属性设置为整数的字符串表示形式?

问题描述 投票:0回答:1

我尝试使用适用于 JS 的 AWS 开发工具包将 DynamoDB 项目的 String 类型属性 Password 设置为整数的字符串表示形式。这是我最初的方法:

import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import {
  UpdateCommand,
  DynamoDBDocumentClient,
} from '@aws-sdk/lib-dynamodb';

const dynamoClient = new DynamoDBClient({
  credentials: {
    accessKeyId: process.env.MY_AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.MY_AWS_SECRET_ACCESS_KEY,
  },
  region: 'us-east-2',
});
const dynamoDocClient = DynamoDBDocumentClient.from(dynamoClient);

const key = { Email: [email protected] };
dynamoInput.Key = key;

const attr = 'Password';
const attrVal = 456789;
dynamoInput.UpdateExpression = `SET ${attr} = ${attrVal}`;

dynamoDocClient.send(new UpdateCommand(dynamoInput));

但这会产生错误

ValidationException: Invalid UpdateExpression: Syntax error; token: "456789", near: "= 456789"
。我认为问题可能是我将 String 类型的属性设置为整数,而不是该整数的字符串表示形式。因此,我尝试在更新表达式中将整数 456789 用各种引号括起来。但显然,直接包含在更新表达式中的引用标记在语法上也是非法的。这导致我求助于使用表达式属性值作为我的字符串表示的占位符。

const attr = 'Password';
const attrVal = 456789;
dynamoInput.ExpressionAttributeValues = { ':v': `${attrVal}` };
dynamoInput.UpdateExpression = `SET ${attr} = :v`;

但这又给了我另一个错误:

ValidationException: The provided key element does not match the schema

amazon-dynamodb aws-sdk aws-sdk-js documentclient
1个回答
0
投票

DocumentClient 没有做任何特殊的事情,它只是设置从 JavaScript 变量推断的值。

const attr = 'Password';
const attrVal = "456789";
dynamoInput.ExpressionAttributeValues = { ':v': attrVal };
dynamoInput.ExpressionAttributeNames={"#p":attr}
dynamoInput.UpdateExpression = "SET #p = :v";
© www.soinside.com 2019 - 2024. All rights reserved.