有条件地从列表属性中删除项目
Remove items from list attribute conditionally
我有一个带有列表属性的项目,列表的每个元素都是一张地图。
"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=?
我该怎么做?
我的理解是这在 DynamoDB 中是不可能的。您可以使用带有乐观锁定的 PUT 操作来避免丢失更新。
如果频繁写入项目会使此操作不可行,那么您可以研究“垂直分区”,将单个大项目拆分为多个项目,这可以降低竞争条件的风险,以防应用程序一次仅更改项目的一部分,并可能降低读取或写入的成本,以防单个项目大几 kb,并且您可以进行更有针对性的查询。
我有一个带有列表属性的项目,列表的每个元素都是一张地图。
"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=?
我该怎么做?
我的理解是这在 DynamoDB 中是不可能的。您可以使用带有乐观锁定的 PUT 操作来避免丢失更新。
如果频繁写入项目会使此操作不可行,那么您可以研究“垂直分区”,将单个大项目拆分为多个项目,这可以降低竞争条件的风险,以防应用程序一次仅更改项目的一部分,并可能降低读取或写入的成本,以防单个项目大几 kb,并且您可以进行更有针对性的查询。