首页 > 解决方案 > 如何在没有类似 sql 的 UpdateExpression 的情况下在 DynamoDB 中执行更新?

问题描述

我的应用程序中有一个非常通用的数据库类实现。

我想向 AWS DynamoDB 更新提供两件事:iddata {...}要更新。

但是,我只在文档中看到以下类似 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" }
}

不幸的是,虽然这不会失败,但它不会更新任何东西。

标签: databaseamazon-web-servicesnosqlamazon-dynamodbdynamodb-queries

解决方案


你没有解释你希望Item: { "label": "Global Records" }做什么:

如果要替换整个项目,可以使用PutItem

但是,如果您只想替换该label项目的属性,而不触及该项目的任何其他现有属性,那么您确实需要UpdateItem像以前一样使用。您可以像以前一样使用UpdateExpression语法 - 老实说,这并不太难 - 但还有一个旧语法AttributeUpdates您可能更喜欢它,因为您只需要定义要替换的属性 - 无需准备“表达式”。AttributeUpdates 语法较旧,被认为是“遗留”但仍然有效,许多应用程序都在使用它,所以我怀疑它会很快消失。


推荐阅读