如何在Firebase触发事件中检索子集合项的父项

时间:2019-03-24 17:16:59

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

我试图编写一个Firebase实时数据库触发器,以监视何时创建了新的聊天消息,然后我想在记录树中导航到父记录,以从聊天会话中检索信息。我在尝试找到正确的参考级别以标识父记录时遇到麻烦。

我的数据库结构如下所示,chatSessions是最高级别(我忘记包括在屏幕截图中),它显示了chatSession记录:

使用以下命令调用我的触发器:

exports.chatUpdate = functions.database.ref('/chatSessions/{sessionId}/messages/{messageId}').onCreate((event, context) => {
    event.ref.parent.once("value").then(snapshot => {
        const session = snapshot.val();
    }
}

我如上所述尝试过,并且session作为消息列表返回,这很有意义,因此我尝试了以下操作,但这对于session没有返回任何内容:

event.ref.parent.parent

基本上,我想转到上面的chatSession,以检索会话中两个用户的ID,因此我可以确定在我的应用中向谁发送通知。谢谢!

1 个答案:

答案 0 :(得分:1)

我不是100%肯定我已经正确理解了您的问题,但是如果您按照以下说明进行操作,您将得到一个session对象,其中包含driverIduserId

exports.chatUpdate = functions.database
  .ref('/chatSessions/{sessionId}/messages/{messageId}')
  .onCreate((event, context) => {

    return event.ref.parent.parent.once('value').then(snapshot => {
      const session = snapshot.val();
      console.log(session);
      return null; 
      //here, instead of returning null, you may return the Promise returned by the notification sending asynchronous task
    });
  });

此外,如果您还想获取sessionId值,只需使用context.params.sessionId