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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:56:12