Firestore TTL策略是否支持使用通配符?
Firebase TTL 策略相关问题解答
核心问题结论
无法用
*作为文档类型(集合)定义通用TTL策略
Firebase的TTL自动删除功能是绑定到特定集合的,不支持用通配符*覆盖所有集合。你没法通过一个策略让所有带expireBy字段且过期的文档自动被删除。默认情况下新增实体类型需要新增TTL策略
没错,每个需要自动过期的集合都得单独配置对应的TTL策略,因为策略是和具体集合绑定的。
变通方案
如果不想每次加新集合都配TTL,可以试试这几种方法:
统一存储过期文档
把所有需要自动过期的文档都放到同一个顶级集合(比如expiringDocs)里,用额外字段(比如entityType)标记不同的实体类型。只需要给这个集合配置一次TTL策略,后续新增实体类型时,只要往这个集合里写文档就行。读取数据时通过entityType筛选对应类型的文档。定时云函数批量清理
写一个定时触发的云函数(比如每天跑一次),遍历所有需要处理的集合,每个集合执行查询:找出expireBy小于当前时间的文档,然后批量删除。这种方式不用给每个集合配TTL,但要注意控制单次处理的文档数量,避免函数超时,同时要考虑Firestore的读写成本。利用子集合统一处理
如果你的实体集合有统一的结构,可以给所有实体集合下的同一个子集合(比如tempItems)配置TTL策略。通过集合组查询,这个策略会覆盖所有父集合下的该子集合。后续新增实体类型时,只要沿用这个子集合结构存放需要过期的文档,就不用再新增TTL策略。
内容的提问来源于stack exchange,提问作者jola
相关产品推荐
相关产品推荐

