database - 如何在没有类似 sql 的 UpdateExpression 的情况下在 DynamoDB 中执行更新?
问题描述
我的应用程序中有一个非常通用的数据库类实现。
我想向 AWS DynamoDB 更新提供两件事:id
和data {...}
要更新。
但是,我只在文档中看到以下类似 SQL 的方法:
{
TableName: "Music",
Key: {
"Artist":"No One You Know",
"SongTitle":"Call Me Today"
},
UpdateExpression: "SET RecordLabel = :label",
ExpressionAttributeValues: {
":label": "Global Records"
}
}
真的没有办法做更多的MongoDB风格,而不必实际编写查询?我会更多地研究这样的事情:
{
TableName: "Music",
Key: {
"id":"123-random-id"
},
Item: { "label": "Global Records" }
}
不幸的是,虽然这不会失败,但它不会更新任何东西。
解决方案
你没有解释你希望Item: { "label": "Global Records" }
做什么:
如果要替换整个项目,可以使用PutItem。
但是,如果您只想替换该label
项目的属性,而不触及该项目的任何其他现有属性,那么您确实需要UpdateItem
像以前一样使用。您可以像以前一样使用UpdateExpression
语法 - 老实说,这并不太难 - 但还有一个旧语法AttributeUpdates您可能更喜欢它,因为您只需要定义要替换的属性 - 无需准备“表达式”。AttributeUpdates 语法较旧,被认为是“遗留”但仍然有效,许多应用程序都在使用它,所以我怀疑它会很快消失。
推荐阅读
- c++ - 是否可以为 MFC 上的静态文本控件添加文本而不是替换整个文本?
- javascript - 从 observable 填充下拉列表
- hibernate - 如果列名与字段名不同,JPA 如何将列名映射到字段?
- javascript - Reactjs在所有组件中隐藏导航栏都有路径= /admin/
- angular - 为什么 Angular 错误消息(javascript 控制台)的格式如此奇怪?
- c# - 给定一个 URL,有没有办法确定从那里下载的文件?
- python-3.x - 使用 BeautifulSoup 函数提取文本时出现问题
- unit-testing - 用于检查模板中呈现的内容的单元测试
- python - 如何在 Catboost 预测方法中实现 select_threshold?
- python - Pandas Dataframe .loc + 更新非唯一日期时间索引?