You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS SDK v3中DynamoDB UpdateItem操作报错:Cannot read properties of undefined (reading '0')

AWS SDK v3 DynamoDB UpdateItem 报错:Cannot read properties of undefined (reading '0')

这个错误的核心原因是:你使用的@aws-sdk/client-dynamodb是DynamoDB的低级客户端,它要求所有请求参数必须严格遵循DynamoDB的AttributeValue数据格式,不能直接传入原生JavaScript类型(比如字符串、数字)。你的代码里直接用了"sram"和1这类原生类型,导致客户端无法解析,触发类型错误。

修正后的代码(低级客户端写法)

const { DynamoDBClient, UpdateItemCommand } = require("@aws-sdk/client-dynamodb");

// 确保已正确初始化客户端,替换为你的AWS区域
const dynamoDB = new DynamoDBClient({ region: "us-east-1" });

const updateRecipientParams = {
  TableName: 'duckies',
  Key: { userId: { S: "sram" } }, // 字符串类型用 { S: "值" } 格式
  UpdateExpression: 'ADD totalReceived :inc',
  ExpressionAttributeValues: { ':inc': { N: "1" } }, // 数字类型用 { N: "字符串形式的数字" } 格式
  ReturnValues: 'UPDATED_NEW',
};

const command = new UpdateItemCommand(updateRecipientParams);
const updatedRecipient = await dynamoDB.send(command);

更简便的替代方案(高级客户端)

如果不想手动处理AttributeValue格式,可以使用@aws-sdk/lib-dynamodb高级客户端,它会自动在原生JS类型和DynamoDB格式之间转换:

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const { UpdateCommand, DynamoDBDocumentClient } = require("@aws-sdk/lib-dynamodb");

const client = new DynamoDBClient({ region: "us-east-1" });
const dynamoDB = DynamoDBDocumentClient.from(client);

const updateRecipientParams = {
  TableName: 'duckies',
  Key: { userId: "sram" }, // 直接用原生字符串
  UpdateExpression: 'ADD totalReceived :inc',
  ExpressionAttributeValues: { ':inc': 1 }, // 直接用原生数字
  ReturnValues: 'UPDATED_NEW',
};

const command = new UpdateCommand(updateRecipientParams);
const updatedRecipient = await dynamoDB.send(command);

内容的提问来源于stack exchange,提问作者Siddharth Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:20:27