Firebase - 使用 Cloud Functions 定位特定的 Firestore 文档字段

Posted

技术标签:

【中文标题】Firebase - 使用 Cloud Functions 定位特定的 Firestore 文档字段【英文标题】:Firebase - Targeting Specific Firestore Document Field with Cloud Functions 【发布时间】:2018-03-16 12:40:12 【问题描述】:

将 Cloud Functions 与 Firebase 实时数据库结合使用时,您可以使用云函数定位特定字段。例如,给定这个 JSON 结构,我可以将 user1 的电子邮件字段更改为 ('/user/userId/email').onUpdate 云函数。

"user": "user1": "name": "John Doe", "phone": "555-5555", "email": "john@gmail.com"

现在使用 Firestore,我似乎无法定位特定字段,只能定位文档。如果是这种情况,以电子邮件字段为目标的 Firestore 云函数必须如下所示,('/user/userId').onUpdate,并且每次user 集合中的任何文档发生更改时都会触发。这将导致大量浪费的云函数触发。这就是 Firestore 的工作方式吗?是否有一个优雅的解决方法?

【问题讨论】:

【参考方案1】:

您是对的,由于数据模型不同,Cloud Firestore 仅允许您在文档级别事件而不是字段级别触发 Cloud Functions。

一种方法是将电子邮件存储在单独的文档中(例如,在名为 Email 的子集合中),因此更新电子邮件是唯一会触发的更改。不过,这确实需要您在每次需要电子邮件时阅读额外的文档。

另一种类似的方法是仍然在同一个文档中,但也将其写入子集合作为第二次写入以触发该功能。使用电子邮件作为我想要的文档,并在文档中有一个时间戳字段,以便于清理旧文档(选择最旧的电子邮件文档进行删除,甚至可能在函数中)

【讨论】:

听起来像是一个循环。我希望很快就可以仅在字段上触发。 提醒一下,实时数据库可以与 Cloud Firestore 并行使用。也许将需要更精确地触发 Cloud Functions 的数据资源放在实时数据库中可能是一种解决方案。我个人发现过多的函数调用不是问题。 Firebase 提供了大量的资源,而且扩展起来非常便宜。但是,每个应用程序都是不同的。 嗨。 Firestore 仍然是这种情况吗?字段值更新不能触发函数?

以上是关于Firebase - 使用 Cloud Functions 定位特定的 Firestore 文档字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Firebase Cloud Messaging 控制台的情况下向 Flutter/Firebase Cloud Messaging 上的特定设备发送通知 [重复]

使用 spark(免费)firebase 计划使用 Cloud Functions for Firebase 导出 excel

在 iOS 中为 Firebase 使用 Cloud Functions

使用 Firebase Cloud Functions 导出的问题

如何使用 Cloud Functions for Firebase 更新 Firebase 实时数据库中的值

Firebase - 使用 Cloud Functions 定位特定的 Firestore 文档字段