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)
| 归档时间: |
|
| 查看次数: |
7844 次 |
| 最近记录: |