Firebase - 使用云功能定位特定的 Firestore 文档字段
Firebase - Targeting Specific Firestore Document Field with Cloud Functions
将 Cloud Functions 与 Firebase 实时数据库结合使用时,您可以使用 Cloud Functions 定位特定字段。例如,给定此 JSON 结构,我可以使用 ('/user/{userId}/email').onUpdate
云函数来定位用户 1 的电子邮件字段何时更改。
{
"user": {
"user1": {
"name": "John Doe",
"phone": "555-5555",
"email": "john@gmail.com"
}
}
}
现在使用 Firestore 似乎无法定位特定字段,只能定位文档。如果是这种情况,以电子邮件字段为目标的 Firestore 云函数必须如下所示,('/user/{userId}').onUpdate
,并在每次 user
集合中的任何文档发生更改时触发。这将导致大量无用的云函数被触发。这就是 Firestore 的工作方式吗?是否有优雅的解决方法?
你是对的,由于不同的数据模型,Cloud Firestore 只允许你在文档级事件而不是字段级触发 Cloud Functions。
一种方法是将电子邮件存储在单独的文档中(例如,在称为电子邮件的子集合中),因此更新电子邮件是唯一会触发的更改。不过,这确实需要您在每次需要电子邮件时阅读额外的文档。
还有一个类似的方法就是在同一个文档中仍然有它,但是也将它写入子集合中作为第二次写入来触发函数。使用电子邮件作为文档,并在文档中有一个时间戳字段,以便于清理旧文档(select 要删除的最旧的电子邮件文档,甚至可能在函数中)
将 Cloud Functions 与 Firebase 实时数据库结合使用时,您可以使用 Cloud Functions 定位特定字段。例如,给定此 JSON 结构,我可以使用 ('/user/{userId}/email').onUpdate
云函数来定位用户 1 的电子邮件字段何时更改。
{
"user": {
"user1": {
"name": "John Doe",
"phone": "555-5555",
"email": "john@gmail.com"
}
}
}
现在使用 Firestore 似乎无法定位特定字段,只能定位文档。如果是这种情况,以电子邮件字段为目标的 Firestore 云函数必须如下所示,('/user/{userId}').onUpdate
,并在每次 user
集合中的任何文档发生更改时触发。这将导致大量无用的云函数被触发。这就是 Firestore 的工作方式吗?是否有优雅的解决方法?
你是对的,由于不同的数据模型,Cloud Firestore 只允许你在文档级事件而不是字段级触发 Cloud Functions。
一种方法是将电子邮件存储在单独的文档中(例如,在称为电子邮件的子集合中),因此更新电子邮件是唯一会触发的更改。不过,这确实需要您在每次需要电子邮件时阅读额外的文档。
还有一个类似的方法就是在同一个文档中仍然有它,但是也将它写入子集合中作为第二次写入来触发函数。使用电子邮件作为文档,并在文档中有一个时间戳字段,以便于清理旧文档(select 要删除的最旧的电子邮件文档,甚至可能在函数中)