如何在AWS Amplify中删除所有满足特定条件的条目?
问题根因
Amplify 基于 @model 注解自动生成的单条删除 resolver 仅支持按 ID 删除单条记录,你用到的 condition 参数仅用于删除单条记录前的额外条件校验,不能用于匹配多条待删除记录,同时单删接口要求必须传入带 id 字段的 input 参数,所以你之前的调用会触发参数缺失报错。
解决方案
你可以根据业务场景选择以下两种方案,不一定必须实现自定义 resolver:
- 方案1:使用默认生成的批量删除能力,无额外后端开发成本
先调用查询接口拉取所有满足title = "Hello"的PostTag记录的 ID 列表,再调用 Amplify 自动生成的批量删除 mutation 即可,调用示例如下:
该方案适合单次删除数据量不大、按条件删除的操作频率较低的场景,缺点是需要先后发送查询、删除两次请求。mutation batchDeletePostTags($input: [BatchDeletePostTagInput!]!) { batchDeletePostTag(input: $input) { deletedItems { id } } } - 方案2:实现自定义 resolver,一次请求完成按条件删除
如果需要高频执行按条件删除、或者删除的数据量较大,推荐自定义 resolver,步骤如下:- 在
schema.graphql中添加自定义 mutation 定义
type Mutation { deletePostTagsByTitle(title: String!): Int }- 通过 Amplify CLI 为该 mutation 绑定自定义 resolver,请求映射模板直接生成 DynamoDB 按条件过滤+批量删除的请求,响应映射模板返回删除的条目数即可。
该方案的优势是仅需一次请求即可完成操作,性能更高。
- 在
内容的提问来源于stack exchange,提问作者hitochan
相关产品推荐
相关产品推荐

