首页 > 解决方案 > 有条件地从列表属性中删除项目

问题描述

我有一个带有列表属性的项目,列表的每个元素都是一个地图。

"listAttr": [
    {"field1":"value1", "field2":"value2", ...}
    , {"field1":"value3", "field2":"value4", ...}
    ....
]

我想执行如下所示的 REMOVE 语句:

REMOVE listAttr[x]

有一个条件

listAttr[x].field1 = :val

我想删除列表中符合我的条件的所有元素

我不想先查询项目来计算 id,因为它会在插入和删除之间产生竞争(在我执行 REMOVE 时,id 可能会不同步)

SQL 等价物是:

DELETE from listAttr where field1=?

我该怎么做呢 ?

标签: amazon-dynamodbdynamodb-queries

解决方案


我的理解是,这在 DynamoDB 中是不可能的。您可以使用带有乐观锁定的 PUT 操作来避免丢失更新。

如果频繁写入该项目会使此操作不可行,那么您可以查看“垂直分区”,将单个大项目拆分为多个项目,这样可以降低竞争条件的风险,仅在应用程序的情况下一次更改项目的某些部分,并可能降低读取或写入的成本,以防单个项目很大,并且您可以进行更有针对性的查询。


推荐阅读