node.js - JS 更新 Dynamo 表中的 Map 元素
问题描述
TL/DR:如何在不修改 Dynamo 中的整个 Map 的情况下更新单个 Map 键/值?
我在一个简单的表格中有一个地图。我试图实现 UPDATE,但我不确定如何引用 Map 对象的键/值对。这是我尝试过的,以及我的表格的屏幕截图:
传入参数 updq(更新问题),updans(更新答案),ans(原始答案),qq(原始问题)
var params = {
TableName: TABLE_NAME,
Key: { topic: topic },
ExpressionAttributeNames: {
"#qq": qq,
"#updq": updq,
},
ExpressionAttributeValues: {
":ans": ans,
":updans": updans,
},
};
if (!doUpdate) {
//replace/create
params["UpdateExpression"] = "SET questions.#qq = :ans"; //this works
} else {
params["UpdateExpression"] = "SET questions.#updq = :updq, _____"; //<<<<<<<<<<THIS DOESNT
}
console.log(`writing params: `, params);
let res = await docClient.update(params).promise();
解决方案
用于创建新问题:问题地图已经存在,因此,SET questions.#qq = :ans
将在 MAP 中创建一个条目
params.ExpressionAttributeNames = {
"#qq": qq,
};
params.ExpressionAttributeValues = {
":ans": ans,
};
params.UpdateExpression = "SET questions.#qq = :ans";
对于更新现有问题,可能是问题本身而不仅仅是答案,因此,我们需要删除现有问题并创建一个新问题,因此,我们需要添加REMOVE questions.#qq
params.ExpressionAttributeNames = {
"#qq": qq,
"#updq": updq,
};
params.ExpressionAttributeValues = {
":updans": updans,
};
params.UpdateExpression =
"REMOVE questions.#qq SET questions.#updq = :updans";
}
推荐阅读
- python - 电子邮件python中没有excel文件附件
- html - 如何将深度嵌套列表缩小到窗口中剩余的空间,以便页面不滚动但列表缩小并且可以滚动
- database - 直接在数据库上执行操作(尤其是 Firestore)
- reactjs - React - 使用功能组件时如何为 .map 函数传递道具
- moodle - Moodle 文件管理器 - 关键部分
- python - 验证数字、浮点数和某些运算符的 Tkinter 条目
- android - Android Room 数据库 平均查询时间(以毫秒为单位)
- stan - 使用由正态分布和单独的多正态分布共享的参数
- docker - Docker Message":"未处理的异常:文件共享已被取消"
- python - 使用 python 从 pandas 数据框创建项集