使用 Cloud Firestore 触发器功能时如何获取 dataID?

Posted

技术标签:

【中文标题】使用 Cloud Firestore 触发器功能时如何获取 dataID?【英文标题】:how do I get the dataID when using cloud firestore triggers function? 【发布时间】:2019-02-06 09:36:43 【问题描述】:

我在 Firestore 数据库中有一个这样的事件集合:

我想使用 Cloud Firestore 触发器。当用户参加一个活动时,该活动的容量将为-1,当该字段更新时我想自动更新另一个字段(“rankPoint”)+3

要实现这一点,我需要在文档更新时触发一个函数

从firestore文档来看,它会是这样的

exports.updateUser = functions.firestore
    .document('users/userId')
    .onUpdate((change, context) => 

      // Get an object representing the document
      // e.g. 'name': 'Marie', 'age': 66
      const newValue = change.after.data();

      // ...or the previous value before this update
      const previousValue = change.before.data();

      // access a particular field as you would any JS property
      const name = newValue.name;

      // perform desired operations ...
    );

对于我来说,它应该是 'events/eventId' 对吗?但是如何在通配符中获取该 eventID?它来自客户端吗?我的意思是在 ios/android 中我会编写代码来更新,比如

db.collection("eventss").document("someEventIDHere").setData(data)

是来自客户端吗?

【问题讨论】:

为什么需要使用云功能?,是什么阻止您在应用程序中这样做? 我想学点新东西,Firestore 看起来真的很不错,如果我可以使用云功能扩展它会更好。如果我只在后台编写一个代码而不是在 ios 和 android 应用程序中编写一个代码,在客户端编写更少的代码,也许会很棒 【参考方案1】:

您的函数将仅交付与已更改的函数模式 (users/userId) 匹配的文档。在您查询之前,其他文档不可用。所以,如果你想从你的事件集合中获得一个文档,你将不得不编写一些代码来访问它,然后决定从那里做什么。

听起来您希望有一个 eventId 通配符,但实际上没有。只有您在函数中定义的 userId 通配符。其他值将需要从您在用户文档中可用的数据中得出。

【讨论】:

在youtube.com/watch?v=Bdm7QNwSHOg 观看您的视频后,我想我对通配符有误解,谢谢 Doug,我现在明白了。

以上是关于使用 Cloud Firestore 触发器功能时如何获取 dataID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cloud 函数中读取 Firestore 文档更新之前/之后的值?

Firebase Cloud Functions Firestore 触发器产生:错误:7 PERMISSION_DENIED:缺少权限或权限不足

Firestore / Cloud功能 - 如何在更改时更新Firestore数据

从 Cloud Functions for Firebase 中的 Firestore 触发器获取用户 ID?

Firebase云功能Firestore触发onWrite在本地测试时未按预期运行

导出 Firestore 备份数据的云功能。使用 firebase-admin 或 @google-cloud/firestore?