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

DynamoDB已删除项在DataStore查询中仍返回,如何彻底清除残留数据

这是AWS Amplify DataStore的本地持久化缓存机制导致的:DataStore会默认在用户设备本地存储一份数据副本,你直接在AdminUI界面、DynamoDB云端手动删除数据的操作,不会主动触发本地缓存的同步更新,因此旧的已删除数据仍然保留在本地,查询时会优先返回本地缓存的内容。

解决方法

  • 临时解决:清理本地缓存
    开发阶段最快的处理方式是直接卸载重装APP,本地缓存会被完全清除。如果需要代码实现,可以在查询前调用DataStore.clear()方法清空本地缓存,强制DataStore从云端重新拉取最新数据,修改后的代码参考:
useEffect(() => {
  const getCurrentUser = async () => {
    // 清空本地缓存,触发全量同步
    await DataStore.clear();
    const userId = await Auth.currentAuthenticatedUser();

    const dbUsers = await DataStore.query(User, uzer =>
      uzer.sub('eq', userId.attributes.sub),
    );

    console.warn(dbUsers);
  };

  getCurrentUser();
}, []);

注意生产环境不要频繁调用DataStore.clear(),会增加云端请求量、影响加载性能,建议仅在用户登出、APP首次启动等场景调用。

  • 长期方案:规范删除操作
    Amplify DataStore默认启用软删机制,直接在DynamoDB硬删记录的操作无法被DataStore的同步逻辑识别,会导致本地和云端数据不一致。后续删除数据建议走官方流程:要么通过AdminUI的删除按钮操作,要么调用DataStore.delete(记录实例)方法触发删除,会自动标记_deleted字段为true,同步到所有端的缓存,后续同步时会自动清理该记录。

  • 可选:关闭软删机制
    如果你不需要软删功能,可以在Amplify的Schema定义中,给对应模型的@model注解配置关闭软删,示例:

type User @model(softDelete: false) {
  id: ID!
  sub: String!
  name: String
  # 其他字段
}

配置后删除操作会直接硬删记录,不会保留_deleted标记的残留数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:06:08