10

将 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 的工作方式吗?是否有一个优雅的解决方法?

4

1 回答 1

9

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

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

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

于 2017-10-05T02:58:40.577 回答