【发布时间】:2021-07-20 15:16:43
【问题描述】:
在 Firebase RTDB 中,当添加 child_added 侦听器时,它会为每个已经存在的子级调用,如果您想将数据迁移出 Firebase 或进行一些架构迁移,这很方便。我找不到您可以使用 Firestore 触发器执行相同操作的证据。处理 Firestore 集合中所有现有文档和任何新文档的推荐方法是什么?
我可以想到两种方法:
- 试试附加 Firestore 触发器是否有效,这样您就可以对某些数据进行实时迁移。
- 创建一些手动触发的云函数,该函数迭代集合并为每个集合调用另一个函数。
如果这个问题过于笼统,我们有一个以某种方式结构化的集合,并且需要在某个时候以不同的结构化方式写入 PostgreSQL。
【问题讨论】:
-
你能解释一下你想要达到的目标吗?
-
一般来说,我想知道如何处理单个集合中的所有(可能很多)文档。这样做的原因可能是将数据传输到不同的数据库,对现有数据进行非规范化以使其更易于查询,或者例如基于所有现有文档中的某些现有字段添加新字段。
-
child_added 与迁移数据无关,因此有点不清楚。当新数据添加到节点时,该函数会通过事件通知应用程序,以便您采取行动;例如添加了一个新用户,应用程序会收到通知,因此 UI 可以显示新用户。 Firestore 有一个非常相似的函数addSnapshotListener,您可以使用.add、.modified 和.removed 来确定数据发生了什么。它还允许您遍历所有文档。
-
在 RTDB 中使用
child_added,我可以遍历所有现有的和新的对象。但是,是的,这只是客户端而不是函数。我想知道是否有类似的东西,但对于 Cloud Function 和 Firstore。addSnapshotListener的链接没有提到监听器也获取现有文档。 -
查看 Firestore 文档 View changes between snapshots,其中说 重要提示:第一个查询快照包含与查询匹配的所有现有文档的添加事件。您当然也可以使用 Cloud 函数迭代文档,但是您想对每个文档做什么?你想导出它还是类似的东西?您不需要云功能 - 只需 addSnapshotListener 即可获取节点,将它们转换为任何内容并保存到磁盘
标签: firebase google-cloud-firestore