更新项目时,NUMBER_VALUE 无法转换为字符串

Jon*_*han 9 javascript amazon-web-services amazon-dynamodb typescript dynamodb-queries

我在 DynamoDB 上遇到了这个奇怪的问题,我似乎无法更新项目。

这是我的命令:

TableName: 'UserTable',
Key: { UID: { S: 'h4XJj3YRxZiF7TDcGkxAhc' } },
UpdateExpression: 'SET numRatings = :numRatings',
ExpressionAttributeValues: { ':numRatings': { N: 336 } },
ReturnValues: 'UPDATED_NEW'
Run Code Online (Sandbox Code Playgroud)

我已经验证该表是正确的,并且表 UID 的键确实具有哈希值h4XJj3YRxZiF7TDcGkxAhc作为值。numRatings目前等于1。

这是我的代码:

  const params = {
    TableName: process.env.USER_TABLE_NAME!,
    Key: {
      UID: {
        S: UID
      }
    },
    UpdateExpression: 'SET numRatings = :numRatings',
    ExpressionAttributeValues: {
      ':numRatings': { N: numRatings } as unknown as AttributeValue
    },
    ReturnValues: 'UPDATED_NEW'
  } as UpdateItemCommandInput;

  try {
    const result = await dbClient.send(new UpdateItemCommand(params));
...
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:NUMBER_VALUE cannot be converted to String也许我是盲目的,但我看不到这种转换可能发生在哪里。

我正在使用 TypeScript 和 AWS-SDK 3.54.0

如果有人能够指出我做错了什么,我将不胜感激。

物品

jar*_*mod 25

根据AttributeValue文档:

数字作为字符串通过网络发送到 DynamoDB,以最大限度地提高跨语言和库的兼容性。但是,DynamoDB 将它们视为数学运算的数字类型属性。

因此,由于您使用的是低级DynamoDB 客户端,因此您需要将数值作为类型发送N,但该值必须是字符串:

':numRatings': { N: `${numRatings}` }
Run Code Online (Sandbox Code Playgroud)

如果您使用更高级别的DocumentClient,它会自动执行 JavaScript 对象和 DynamoDB 属性值之间的数据编组,那么您可以使用:

':numRatings': numRatings
Run Code Online (Sandbox Code Playgroud)