基于时间戳的云函数查询监听器

Cloud Function Query Listener Based on Timestamp

我正在构建一个应用程序,该应用程序必须在某个 Firestore 文档的时间戳变得早于当前时间时做出反应。有没有办法将这种类型的查询侦听器设置为 Cloud Functions,或者以其他方式实现在时间戳超过当前时间时对文档做出反应的预期目标?

根据我阅读 Firestore 和 Cloud Functions 文档的了解,可能无法将查询侦听器设置为 Cloud Functions。此外,这不仅仅是一个常规查询侦听器——查询条件(时间)是动态的,因此它不是典型的查询结构(“is A < 5”),而是一个动态结构(“is T < now”,其中“现在”每时每刻都在变化。

如果这是真的作为查询侦听器是不可能的,我当然会感谢任何有关如何通过其他方式实现此目标的建议。我的一个想法是创建一个 Cloud Function,它每 60 秒触发一次并根据当时的时间运行查询,但这不允许持续监听(遗憾的是 60 秒对我们的使用来说太长了)。非常感谢你

Firestore 查询只能过滤明确存储在文档中的文字值 return。无法在查询中执行计算,因此任何时候您需要在查询中使用 now - 将在创建查询时计算时间戳。

有两种常见的方法可以实现您描述的生存时间类型的功能:

  1. 设置一个周期性运行的进程(例如 time-based Cloud Function),每次进程运行时执行查询以确定哪些文档已过期。

    作为此方法的一个变体,您可以在每次 Cloud Function 触发时启动一个永久侦听器以进行更新,并在下一次触发之前保持活动状态的时间略短于间隔。

  2. 为每个文档创建一个 Cloud Task,expires/triggers 当文档需要处理时。虽然这看起来更复杂,但实际上最终会更简单,因为您的回调现在会在单个文档上触发。

另见:, which includes a link to Doug's excellent article on How to schedule a Cloud Function to run in the future with Cloud Tasks (to build a Firestore document TTL).