【问题标题】:Cloud Functions for Firebase - get parent data from database triggerCloud Functions for Firebase - 从数据库触发器获取父数据
【发布时间】:2017-10-02 17:50:02
【问题描述】:

是否有一种干净的内置方式直接引用数据库触发器上方节点的数据值?我知道我可以得到一个父 ref,然后我可以查询它的值,但是如果有更简洁的方法来做这件事,那就太感谢了。

为了清楚起见,我想使用对象中的子节点作为触发器,并在发生时直接获取父对象的值,以避免在对父对象进行其他更改时调用该函数:

const parentObject = {
 triggerValue: 'I want the function to be triggered only on writes to this path',
 parentValue: 'But I also want this value',
}

谢谢

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    我已经在谷歌上搜索了六次这个答案,并且不得不重新实施解决方案。

    以下是从子属性post.body 获取父数据post 的方法,该属性已更改:

    exports.doStuff = functions.database
      .ref("/posts/{postId}/body")
      .onWrite(event => {
        return event.data.ref.parent.once("value").then(snap => {
          const post = snap.val();
          // do stuff with post here
        });
      });
    

    【讨论】:

    【解决方案2】:

    您可以使用event.data.refevent.data.adminRef 导航数据库。它们是Reference 对象,它们的工作方式与您在客户端使用 Firebase 构建 Web 应用程序时完全一样。因此,如果使用 parent 属性向上导航对您来说效果很好,那么就使用它。没有额外的特殊语法。

    【讨论】:

    • 好的,谢谢。我只是好奇该数据是否已经存在于事件对象中,就像 event.data.val() 一样并且不需要异步读取,但这很好,因为它不这样做是有意义的是。谢谢
    • 我明白了,是的,该事件仅包含匹配路径上的数据,而其上方没有任何内容。这可能会付出不必要的代价。
    • 这已经改变了;自 1.0.0 以来,此答案不再起作用。
    猜你喜欢
    • 2018-05-21
    • 2017-10-01
    • 2017-10-18
    • 2017-08-25
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多