You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止已删除记录出现在AWS Amplify GraphQL查询结果中?

Amplify GraphQL API 已删除条目过滤问题说明

默认开启数据同步/冲突检测的Amplify GraphQL API,确实会返回软删除标记为_deleted: true的数据条目,你没有遗漏常规配置项。
当前版本原生自动生成的查询逻辑存在明确限制:

  • 自动生成的listXYZTable、syncXYZTable查询,默认没有开放_deleted字段作为合法查询过滤参数,无法在请求参数层面直接过滤已删除条目。

你观察到的不同端表现差异是客户端侧过滤导致的,不是接口行为不一致:

  • DataStore SDK在客户端侧做了硬编码逻辑,拿到API返回数据后会自动剔除_deleted=true的条目,不会向上层业务暴露
  • Amplify Studio的「内容」管理面板同样是在前端拿到接口返回后做了一层过滤,并非接口层面拦截了已删除数据,才会出现可视化界面看不到、直接调API能拿到的逻辑割裂问题。

如果需要在直接调用GraphQL API的场景过滤已删除条目,可使用以下两种落地方法:

  1. 自定义查询解析器
    修改对应模型list、sync查询的请求映射模板,在DynamoDB查询条件中默认追加_deleted = :false的过滤规则,从接口层面默认不返回已删除数据。如果有管理员查询已删除数据的需求,可以单独新增专属查询接口,配置对应权限后放开过滤规则即可。
  2. 调用侧手动过滤
    若不想调整后端解析器配置,所有直接调用API的角色(数据科学家、运维管理人员等)拿到返回结果后,手动剔除_deleted字段为true的条目即可。注意处理sync增量同步场景时不要误删删除标记,否则会导致客户端同步状态异常。

注意:不要直接修改自动生成的GraphQL Schema,尝试给_deleted系统字段加索引或查询参数的操作会在下次执行amplify push时被自动生成的模板覆盖,自定义改动不会持久生效。

内容的提问来源于stack exchange,提问作者orome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:33:11