我想对 dynamoDB 进行更新调用:
- 如果 ddb 项目存在,则更新现有字符串集的新值(添加而不是替换),
- 或者如果 ddb 项目尚不存在,则创建一个新项目。
- 但这两种情况都应该只用一个 api 调用来解决。
UpdateItem
通过使用以下操作,我目前可以做到这一点:
val requestParameters =
s"""
|{
| "TableName": "custom_table_name",
| "Key": {
| "id": {
| "S": "custom_id"
| }
| },
| "UpdateExpression": "ADD user_list :newItem",
| "ExpressionAttributeValues": {
| ":newItem": { "SS": ["user1","user2"] }
| }
|}
|""".stripMargin
但我现在想切换到PartiQLExecuteStatement
,我通过操作使用提出了以下想法:
val requestParameters =
s"""
|{
| "Statement": "UPDATE custom_table_name SET user_list=SET_ADD(user_list, ?) WHERE id='custom_id'",
| "Parameters": [
| {
| "SS": ['user1','user2']
| }
| ]
|}
|""".stripMargin
对于 PartiQL 解决方案,如果该项目确实存在,则一切都按预期工作,但如果该项目不存在,我会得到:
"400 Bad Request"/"The conditional request failed"
(因为密钥还不存在)
但我现在不想再次调用以在 PartiQL 下插入新项目,我宁愿只使用 1 个 API 调用来处理这两种情况,因为可以通过 UpdateItem 使用。
有什么想法可以在 PartiQL 下实现吗?
文件:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.update.html -> PartiQL 只有 SET 和 REMOVE https://docs.aws.amazon.com/amazondynamodb/latest/developerguide /Expressions.UpdateExpressions.html#Expressions.UpdateExpressions -> 较旧的 UpdateExpressions 具有 SET、REMOVE、ADD和 DELETE
(我在不使用 AWS SDK的情况下直接向dynamoDB 低级 api发出请求)