问题描述
简短的一般性问题: 我可以设置存储在Firebase实时对象中的日期上的侦听器(具有Firebase实时,函数或一般功能),该侦听器在日期过期时删除该对象吗?
长特定问题: 我正在使用firebase实时数据库和firebase函数来构建一个市场应用程序,用户可以在该应用程序上对产品进行出价,但是这些出价将在该应用程序中存储的日期到期。用户还可以按最高或最低出价搜索/过滤产品,我正在使用algolia进行全文搜索和类型过滤。为了最小化成本,我将数据库结构如下:
出价{expirationDate,productID等。} 产品{highestBidID,highestBidcost,lowestBidID,lowestBidcost等...} (所有可搜索/可过滤变量的算法模型具有相似的结构)
我遇到的问题是如何删除过期的投标,然后在投标包含存储的值的情况下更新产品模型和aloglia模型。
我能想到的唯一方法(给定我已建立的数据库)是对出价项目使用某种侦听器,如果出价过期且出价是最高或最低出价,则调用另一个更新的函数产品模型和algolia模型分别处理下一个最高/最低出价。
我强烈反对每次拉出产品时都只更新最高/最低出价,因为这将导致大量额外的通话,增加费用并减慢一切。我还必须从algolia模型中删除最高/最低出价,并仅在一次从algolia返回列表后再次进行过滤,以大幅增加通话次数。
这种侦听器是否存在?有更好的方法吗?
解决方法
是否可以设置存储在Firebase实时对象中的日期上的侦听器(具有Firebase实时,函数或一般功能),该侦听器会在日期到期时删除该对象?
不,没有简单的方法可以做到这一点。
您将必须编写代码来安排使用某些其他机制或产品删除节点。我写了一个博客,描述了如何使用Cloud Tasks作为schedule the deletion的机制来过期(TTL)Firestore文档。这同样适用于实时数据库中的节点。