DynamoDB Upsert - 更新还是创建?

DynamoDB Upsert - Update or Create?

我们使用 DynamoDB UpdateItem

这就像我们可以学习的“upsert”from the documentation

Edits an existing item's attributes, or adds a new item to the table if it does not already exist. [...]

当我们发出请求时,为了确定是否创建了项目或更新了现有项目,我们请求 ALL_OLD。这很好用,让我们能够区分 updatecreate

作为附加要求,我们还希望 return ALL_NEW,但仍然知道执行的操作类型。

问题:这是否可以在单个请求中完成,还是我们必须发出第二个(获取)请求?

默认情况下,DynamoDB 不支持此功能,DynamoDB 流中没有 ALLNEW_AND_OLD_IMAGES,但您始终可以自己动手做。

当您执行 UpdateItem 调用时,您会得到 UpdateExpression,这基本上是要应用到项目的更改列表。假设您在 操作之前告诉 DynamoDB return 看起来像 的项目,您可以在本地构建新状态。

只需创建 ALL_OLD 响应的副本,并在本地应用 UpdateExpression 的更改。这绝对比两次 API 调用快,但实现稍微复杂一些。