如何在DynamoDB的PutCommand中仅当变量非undefined时添加新值
解决DynamoDB PutCommand无法动态添加Item属性的问题
你遇到的问题根源在于PutCommand实例创建后,直接访问createNewAccount.Item是无效的——AWS SDK v3的命令实例不会把传入的Item直接暴露为顶层可修改属性,因此会提示"Cannot set properties of undefined"。
下面提供两种可行的解决方式:
方法一:先构建完整Item再创建命令(推荐)
先初始化基础Item对象,根据条件动态添加属性后,再传入PutCommand构造函数,逻辑更清晰:
// 初始化基础Item结构 const item = { "PK": email, "SK": type + "#" + school, "GSI1SK": classroom + "#" + name, }; // 仅当type为"STD"且number不为undefined时添加属性 if (type === "STD" && number !== undefined) { item["number"] = number; } // 基于完整Item创建PutCommand const createNewAccount = new PutCommand({ TableName: tableName, Item: item }); const createNewAccountResponse = await client.send(createNewAccount);
方法二:通过命令实例的input属性修改
如果确实需要在创建PutCommand后调整属性,可以通过访问实例的input属性操作,SDK会将传入的参数存储在该属性下:
const createNewAccount = new PutCommand({ TableName: tableName, Item : { "PK" : email, "SK" : type + "#" + school, "GSI1SK" : classroom + "#" + name, } }); if (type === "STD" && number !== undefined) { // 通过input.Item修改属性 createNewAccount.input.Item["number"] = number; } const createNewAccountResponse = await client.send(createNewAccount);
两种方式都能解决你的问题,优先推荐第一种写法,代码可读性和维护性更强。
内容的提问来源于stack exchange,提问作者Auresol
相关产品推荐
相关产品推荐

