DynamoDB Upsert - 更新还是创建?

vin*_*ent 8 upsert amazon-web-services amazon-dynamodb

我们使用 DynamoDB UpdateItem

正如我们可以从文档中了解到的那样,这充当“更新插入”

编辑现有项目的属性,或者将新项目添加到表中(如果尚不存在)。[...]

当我们发出请求时,为了确定是否创建了某个项目或更新了现有项目,我们请求ALL_OLD。这非常有效,可以让我们区分updatecreate

作为附加要求,我们还想返回ALL_NEW,但仍然知道所执行的操作类型。

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

Mau*_*ice 7

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

当您进行调用时UpdateItem,您会看到UpdateExpression,它基本上是要应用于该项目的更改列表。鉴于您告诉 DynamoDB 返回该操作之前的项目,您可以在本地构造新状态。

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