首页 > 解决方案 > 如何在不知道 id 的 fire-base 数据库中查找嵌套值?

问题描述

我正在构建一个以 Firebase 作为后端的聊天应用程序。问题是我在 firebase 数据库中创建了两个表,一个用于存储用户,另一个用于存储消息。我的表如下...

{
  "chat-group" : {
    "a0d4086c-66f7-4437-a23f-4b8e07da9bb8" : {
      "userId1" : "cdc0f59c-66b2-4bac-abe1-fe89a0e29a28",
      "userId2" : "382a321d-8bcd-4b62-bb4e-25b7c1df4ca2"
    },
    "b9afcd88-0b6a-4e77-8dd7-ea3fc17962b9" : {
      "userId1" : "cdc0f59c-66b2-4bac-abe1-fe89a0e29a28",
      "userId2" : "cb754c6b-1702-47dd-a3b8-b34e970ea9a2"
    }
  },
  "messages" : {
    "a0d4086c-66f7-4437-a23f-4b8e07da9bb8" : {
      "-LtT1kMDQrrkSbIDscnz" : {
        "name" : "Parth Shrivastav",
        "text" : "hello",
        "timestamp" : 1573535811230
      }
    },
    "b9afcd88-0b6a-4e77-8dd7-ea3fc17962b9" : {
      "-LtT1xclHzrnY_xSWrMJ" : {
        "name" : "Parth Shrivastav",
        "text" : "",
        "timestamp" : 1573535865601
      }
    }
  }
}


我想将 users 表下的聊天 ID 与消息下的聊天 ID 相关联,并在该聊天 ID 的自动生成的 ID 下检索消息。

database().ref('messages/b9afcd88-0b6a-4e77-8dd7-ea3fc17962b9)
        this.ref
            .limitToLast(20)
            .on('child_added', snapshot =>
            snapshot.forEach(msgdata => {
              console.log(msgdata)

通过将 forEach 用于数据,数据库似乎表现为静态,并且当数据中似乎有任何新消息可用时不会更新。我需要刷新屏幕以获取任何新数据。

标签: javascriptfirebasereact-nativefirebase-realtime-database

解决方案


由于您正在侦听child_added事件,因此 Firebase 客户端将为messages/b9afcd88-0b6a-4e77-8dd7-ea3fc17962b9. 这意味着您不需要snapshot在代码中循环遍历子项,并且可以直接从snapshot.

.on('child_added', snapshot =>
  console.log(snapshot.val());
}

推荐阅读